# 11.Vue 细节
# key 的使用
# 两种 key
- 使用 index
- 需要数据没有独立状态,不会进行增加/删除等影响后续元素 key 变化
- 利于 Vue 虚拟 DOM 原地复用节点
- 使用 id
- 适用于单选框的列表数据
- 有独立状态的数据
- 效率会比较低,但是会比较精确的 diff
# v-for 和 v-if
- Vue2 中不要把这两个放在一个节点
- 因为 v-for 优先级高,浪费性能
- Vue3 会把 v-if 提前,但是还是不建议放在一起
- 解决方案
- template
- v-if 提前
- 使用 computed 控制显示节点
# v-model 和 .sync 修饰符
两者本质都是一样,并没有任何区别: “监听一个触发事件”="(val) => value = val"。
细微差异:
- v-model 默认对应的是 input 或者 textarea 等组件的 input 事件,如果在子组件替换这个 input 事件,其本质和.sync 修饰符一模一样。比较单一,不能有多个
- 一个组件可以多个属性用.sync 修饰符,可以同时"双向绑定多个“prop”,而并不像 v-model 那样,一个组件只能有一个。
使用场景:
- v-model 针对更多的是最终操作结果,是双向绑定的结果,是 value,是一种 change 操作。比如:输入框的值、多选框的 value 值列表
- sync 针对更多的是各种各样的状态,是状态的互相传递,是 status,是一种 update 操作。比如:组件 loading 状态、
<input v-model="searchText" />
// 等价于
<input :value="searchText" @input="searchText = $event.target.value" />
// 组件上使用的时候
<CustomInput
:modelValue="searchText"
@update:modelValue="newValue => searchText = newValue"
/>
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9