Vue 文档查漏补缺
不能老往前跑,要时不时看会儿地图
Vue 文档
工作中用 Vue 比较多,但好像看文档已经是两年前的事情了,有很多边边角角的用法或是不太优雅的写法肯定有遗漏,所以再看一遍,查漏补缺。
避免 v-for 和 v-if 混合使用
1 | <div v-for='item in items' v-if='item.active'></div> |
上面这个写法很常见吧,我也写过不少这样的代码。但文档里说了,不能这样用,原因是 v-for 比 v-if 优先级高,所以以上模版是这样执行的:
1 | for(item in items) { |
乍一看没啥问题,但 items 是响应式的,任意一个数组成员改变了,以上都会执行一遍。
items 为分两种类型:active 和 unactive。实际上遍历前者就行了。其余的遍历都是浪费。而且 后者改变了也会遍历。这也是多余的。
1 | <div v-for='item in items'></div> |
这样就好多了~
data 的值必须是函数
1 | data = function(){ |
为什么要这样设计呢?如果组件的 data 都是对象的话,组件被调用多次,所有的组件都会共享这个对象。
Props 描述尽可能详细
1 | props = { |
详细的 props 就是文档~
key 字段
1 | <div v-if='flag'> |
如果 flag 发生变化,Vue 只会对 input 进行修补,不会重新渲染 input,它会尽可能的复用 DOM,所以当你在 input 键入值时,再切换 flag,值依然会存在。
给他们赋值不同的 key,就会避免这种“错误”
再看下面这个例子1
2
3<div v-for='item in items'>
<input type='' />
</div>
当 items 顺序发生变化时,vue 默认不会将节点的顺序调换,因为这比直接删除节点再生成节点的开销大多了。所以再这个 demo 中,Vue 不会复用节点。
但当子组件的内容过多或者嵌套太深时,复用又很重要了,这时,我们需要加上 key ,顺序发生变化时,Vue会复用它。
is字段
在下面的例子中,使用 is="todo-item" 来代替 <todo-item> 的写法,因为 ul 内部只有 li 标签有效,这种写法避免了将 <todo-item> 识别为标签潜在的错误。
1 | <ul> |
但以上问题只会在 vue 以 cdn 引入时出现。
v-modal 修饰符
.lazy
在 input change 时,才同步,而非 onInput 时
.number
自动将用户输入的值转为 number 类型
.trim
去除首位字符串
组件也可以用 v-modal
- props 需要有绑定的值
- 组件 input 时,需要 $emit(‘input’, event)