文章 评论 浏览 28
vue和react虽然都采用了diff算法。 但是diff设计是截然不同的, vue采用依赖收集追踪,可以更加细粒度的更新组件,即给模板使用到的每一个属性绑定监听, 而react是采用自顶而下的更新策略,每次小的改动都会生成一个全新的vdom。
不管是什么diff算法,核心都是一样的,key的作用主要是为了高效的更新虚拟DOM列表,key 值是用来判断 VDOM 元素项的唯一依据 。 使用key不保证100%比不使用快,这就和Vdom不保证比操作原生DOM快是一样的,这只是一种权衡,其实对于用index作为key是不推荐的,除非你能够保证他们不会发生变化。这个key要体现唯一,通常推荐使用server给的SQL-ID。通常接口返回的又没有SQL-ID,怎么办呢,又不能用随机数,只能用index代替喽!
推荐使用shortid生成唯一key的数组,和数据数组一起使用,省去提交数据时再重组数组。
案例:
import React from 'react'; import shortid from 'shortid'; class Demo extends React.Component { constructor(props) { super(props); this.state = { data: ['a', 'b', 'c'] } this.dataKeys = this.state.data.map(v => shortid.generate()); } deleteOne = index => { // 删除操作 const { data } = this.state; this.setState({ data: data.filter((v, i) => i !== index) }); this.dataKyes.splice(index, 1); } render() { return ( <ul> { data.map((v, i) => <li onClick={i => this.deleteOne(i)} key={this.dataKeys[i]} > {v} </li> ) } </ul> ) } }
另外需要指明的是:
@mqyqingfeng 感觉(false || obj.b)()像是一个自调用立执行函数,所以是函数调用模式.
(false || obj.b)()
自调用立执行函数
函数调用模式
文章 0 评论 0
接受
vue和react虽然都采用了diff算法。 但是diff设计是截然不同的, vue采用依赖收集追踪,可以更加细粒度的更新组件,即给模板使用到的每一个属性绑定监听, 而react是采用自顶而下的更新策略,每次小的改动都会生成一个全新的vdom。
不管是什么diff算法,核心都是一样的,key的作用主要是为了高效的更新虚拟DOM列表,key 值是用来判断 VDOM 元素项的唯一依据 。 使用key不保证100%比不使用快,这就和Vdom不保证比操作原生DOM快是一样的,这只是一种权衡,其实对于用index作为key是不推荐的,除非你能够保证他们不会发生变化。这个key要体现唯一,通常推荐使用server给的SQL-ID。通常接口返回的又没有SQL-ID,怎么办呢,又不能用随机数,只能用index代替喽!
推荐使用shortid生成唯一key的数组,和数据数组一起使用,省去提交数据时再重组数组。
案例:
另外需要指明的是:
-key值不同,则react先销毁该组件(有状态组件的componentWillUnmount会执行),然后重新创建该组件(有状态组件的constructor和componentWillUnmount都会执行)
React小技巧汇总
第 1 题:写 React / Vue 项目时为什么要在列表组件中写 key,其作用是什么?