Reactjs不能忽略的key
前言
不使用key,可能出现的错误
我之前做了一个2048的小游戏,但是在移动的时候,总是会出现跳的现象:
举个例子,目的是可以在最上方增加输入行: export default class List extends React.Component { index = 3 constructor(props) { super(props); this.state = { list: [2,1] }; } insert = ()=>{ let list = [this.index++,...this.state.list]; this.setState({ list }); } render(){ return ( <div> <ul> { this.state.list.map(value=>{ return <Item value={value} /> }); } </ul> <button onClick={this.insert}>insert</button> </div> ); } } export default class Item extends React.Component { constructor(props) { super(props); this.state = { input: "" }; } onChange = (e)=>{ this.setState({ input: e.target.value }) } render(){ return (<li>Input {this.props.value} : <input type="text" onChange={this.onChange} value={this.state.input} /></li>); } } 看着似乎没有问题,但是由于缺少 由上面的 由于没有使用 而如果我们使用了 render(){ return ( <div> <ul> { this.state.list.map(value=>{ return <Item key={value} value={value} /> }); } </ul> <button onClick={this.insert}>insert</button> </div> ); } 那么 缺少key,会造成性能的浪费就像之前的那个例子里所展示,不加 我们在 shouldComponentUpdate(nextProps,nextState){ return nextProps.value != this.props.value || this.state.input !== nextState.input; } 这样子保证当 首先,我们增加几个功能 其次,我们规定的步骤是1. insert 2.insert 3.reverse 4.delete,来看一看渲染的次数 下面是打印的结果: 使用Key 对比效果很明显,没有使用 key的其他用法看了这篇文章发现了一个很有趣的用法. 按照作者所说,如果同一个组件,如果要修改其中的一些 有的时候你想要销毁和重建组件,触发 详细的可以看看上面的文章链接。 注意事项
排版有点乱。。。我会继续修改 以上 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |