当前位置: 首页 > wzjs >正文

网站标题分隔符网站快速排名推荐

网站标题分隔符,网站快速排名推荐,商城网站制作报价,河北邯郸网站建设公司一、v-for指令详解 v-for是Vue中最常用的指令之一&#xff0c;用于遍历展示列表数据。它的基本语法是&#xff1a;v-for"(val, key) in xxx" :key"key"&#xff0c;其中in也可以替换为of。 1.1 基本用法 v-for可以遍历多种数据类型&#xff1a; <di…

一、v-for指令详解

v-for是Vue中最常用的指令之一,用于遍历展示列表数据。它的基本语法是:v-for="(val, key) in xxx" :key="key",其中in也可以替换为of

1.1 基本用法

v-for可以遍历多种数据类型:

<div id="app"><!-- 遍历数组 --><h2>人员列表</h2><ul><li v-for="(p, index) in persons" :key="p.id">{{index}}:{{p.name}} - {{p.age}}</li></ul><!-- 遍历对象 --><h2>车辆信息</h2><ul><li v-for="(val, key) in car" :key="key">{{key}}:{{val}}</li></ul><!-- 遍历字符串 --><h2>字符信息</h2><ul><li v-for="(char, index) in str" :key="index">{{index}}:{{char}}</li></ul><!-- 遍历数字 --><h2>数字</h2><ul><li v-for="(num, index) in 5" :key="index">{{index}}:{{num}}</li></ul>
</div>

对应的JavaScript代码:

new Vue({el: '#app',data: {persons: [{id: '001', name: '张三', age: 18},{id: '002', name: '李四', age: 19},{id: '003', name: '王五', age: 20}],car: {brand: '奔驰',price: '40万',color: '黑色'},str: 'hello'}
})

1.2 遍历不同数据类型的说明

  1. 数组:第一个参数是数组元素,第二个参数是索引

  2. 对象:第一个参数是属性值,第二个参数是属性名

  3. 字符串:第一个参数是字符,第二个参数是索引

  4. 数字:遍历从1开始到该数字的整数,第一个参数是数字值,第二个参数是索引

二、key的原理与重要性

2.1 虚拟DOM中key的作用

key是虚拟DOM对象的唯一标识,当数据发生变化时,Vue会执行以下步骤:

  1. 根据新数据生成新的虚拟DOM

  2. 将新虚拟DOM与旧虚拟DOM进行Diff算法比较

    • 如果找到相同key的节点:

      • 内容没变 → 直接复用之前的真实DOM

      • 内容变化 → 生成新的真实DOM替换旧的真实DOM

    • 如果没找到相同key的节点 → 创建新的真实DOM并渲染

2.2 使用index作为key的问题

<ul><li v-for="(p, index) in persons" :key="index">{{p.name}} <input type="text"></li>
</ul>

假设我们有以下操作:

  1. 在列表开头添加一个新项

  2. 在输入框中输入一些内容

问题表现

  1. 会产生不必要的真实DOM更新,降低效率

  2. 输入框内容会出现错位(因为index变化导致输入框与数据对应关系错乱)

2.3 最佳实践

  1. 理想情况:使用数据的唯一标识作为key(id、手机号、身份证号等)

<li v-for="p in persons" :key="p.id">{{p.name}}</li>
  1. 2. 简单场景:如果没有逆序增删等操作,可以使用index作为key

三、列表过滤与排序

3.1 列表过滤的实现方式

方式一:使用watch实现
new Vue({data: {keyword: '',persons: [...],filterPerson: []},watch: {keyword: {immediate: true,handler(newVal) {this.filterPerson = this.persons.filter(p => {return p.name.includes(newVal)})}}}
})
方式二:使用computed实现(推荐)
new Vue({data: {keyword: '',persons: [...]},computed: {filterPerson() {return this.persons.filter(p => {return p.name.includes(this.keyword)})}}
})

3.2 列表排序的实现

computed: {filterPerson() {let arr = this.persons.filter(p => {return p.name.includes(this.keyword)})if(this.sortType) {arr.sort((p1, p2) => {return this.sortType === 1 ? p2.age - p1.age  // 降序: p1.age - p2.age  // 升序})}return arr}
}

四、Vue数据监测原理深度解析

4.1 对象监测

Vue会通过setter监视data中所有层次的对象属性:

  1. 初始化时定义:只有在new Vue时就存在的属性才会被监测

  2. 新增属性问题:后期添加的属性默认没有响应式

vm.newProp = 'value' // 非响应式

    3. 解决方案:使用Vue.set或vm.$set

Vue.set(vm.someObject, 'newProp', 'value')
// 或
this.$set(this.someObject, 'newProp', 'value')

4.2 数组监测

Vue通过重写数组的变更方法实现监测:

  1. 包裹的方法:push/pop/shift/unshift/sort/splice/reverse

  2. 原理

    • 调用原生数组方法更新数据

    • 重新解析模板,更新页面

  3. 注意事项

    • 直接通过索引修改数组元素不是响应式的

      vm.items[0] = newValue // 不是响应式的
    • 解决方案

    • Vue.set(vm.items, 0, newValue)
      // 或使用splice
      vm.items.splice(0, 1, newValue)

4.3 数据劫持原理

Vue在初始化时会对data进行"数据劫持":

  1. 使用Object.defineProperty将data属性转换为getter/setter

  2. 每个组件实例都有对应的watcher实例

  3. 当属性被访问或修改时,会触发getter/setter通知watcher

  4. watcher会触发组件重新渲染

 

// 简化的数据劫持示例
function observe(data) {if (!data || typeof data !== 'object') returnObject.keys(data).forEach(key => {let value = data[key]Object.defineProperty(data, key, {get() {console.log(`读取${key}: ${value}`)return value},set(newVal) {console.log(`设置${key}: ${newVal}`)value = newVal}})})
}

五、实际应用案例

5.1 动态表单实现

<div id="dynamic-form"><button @click="addField">添加字段</button><div v-for="(field, index) in formFields" :key="field.id"><input v-model="field.value" :placeholder="field.placeholder"><button @click="removeField(index)">删除</button></div>
</div><script>
new Vue({el: '#dynamic-form',data: {formFields: [],nextId: 1},methods: {addField() {this.formFields.push({id: this.nextId++,value: '',placeholder: '请输入字段' + this.nextId})},removeField(index) {this.formFields.splice(index, 1)}}
})
</script>

5.2 性能优化技巧

  1. 避免大型列表:对于大型列表,考虑使用虚拟滚动(如vue-virtual-scroller)

  2. 避免不必要的响应式:冻结不需要响应式的大数据对象

this.largeData = Object.freeze(largeData)
  1. 合理使用key:确保key的稳定性和唯一性

六、总结

  1. v-for是Vue列表渲染的核心指令,支持多种数据类型

  2. key的正确使用对列表渲染性能和正确性至关重要

  3. 计算属性是实现列表过滤和排序的理想选择

  4. Vue的数据监测机制基于getter/setter和数组方法重写

  5. 对于动态添加的属性,需要使用Vue.set保证响应式

理解这些核心概念,能够帮助开发者编写更高效、更可靠的Vue应用程序。在实际项目中,合理应用这些知识可以避免许多常见的性能问题和bug。

http://www.dtcms.com/wzjs/335187.html

相关文章:

  • 做网站刷QQ会员网站seo外包优化服务商
  • 东莞网站建设实例分析网站怎么创建
  • 用户体验设计经典案例广州seo推广
  • 上海网站建设咨询站霸网络互联网营销师培训课程免费
  • wordpress后台中文泉州seo培训
  • 科技类网站设计特点国外域名购买
  • 做网站模板的海报尺寸多少国际站seo优化是什么意思
  • 龙岩做网站的地方长沙seo霜天
  • wordpress 扫码付费seo中介平台
  • 关于春节的网站设计html武汉竞价托管公司
  • 网站备案注销流程北京网站seo招聘
  • 深圳网站建设好吗淘宝推广软件
  • 做有关兼职网站的需求分析企业营销型网站有哪些
  • 手机cms建站系统武汉网络推广广告公司
  • 微网站一键导航游戏优化大师官方下载
  • 呼伦贝尔市住房和城乡建设局网站如何做好营销推广
  • 织梦网站会员功能电商中seo是什么意思
  • dedecms仿站教程免费生成短链接
  • 中文域名查询seo优化收费
  • 天宁网站建设竞价托管哪家效果好
  • 网站优化的代码网站关键词快速排名服务
  • 校友录网站开发设计英语培训机构
  • 抚州北京网站建设网络推广营销方法
  • 百度云空间能做网站吗推广代理平台
  • 免费搭建微信网站多少钱广州seo快速排名
  • 中日韩精品电影推荐网站2023年火爆的新闻
  • 基于php mysql的网站开发谷歌广告代理
  • 网站制作首选 新鸿儒建网站软件
  • 制作网页的软件免费沈阳seo
  • 做防水怎么注册网站营销软文300字范文