03 Mar 2021 737字 3分 state 状态
- state只能定义在
constructor(){}
生命周期中 - 当state状态变化时,视图自动更新,视图更新state不会更新(单向绑定)
- state只能通过
this.setState()
方法来修改,因为这个api会触发diff算法,从而使得视图更新 - this.setState() 默认情况下是异步的,在定时器内是同步的
- 在同一个方法中,如果有多个
this.setState()
方法,React会先将这些函数合并后在修改,因此这样只会触发一次diff算法 - 修改state状态时,新值与旧值无光,建议使用
this.setState({haha: hehe}[,fn])
来修改状态 - 修改state状态时,新值由旧值计算而来,建议使用
this.setState((state,props) => {return {haha: hehe}}[,fn])
来修改状态 - state和props建议不要相互赋值,因为他们是完全独立的
- 每次执行this.setState()都会触发diff算法,diff算法找出虚拟DOM中的脏节点,然后执行render方法更新视图,只渲染与状态相关的元素节点
条件渲染
{true && <div>显示</div>}
{true ? <div>显示</div> : <div>不显示</div> }
- 多条件判断,使用第一种进行组合,或者封装为函数
动态样式
- class写成className
- style 写成
列表渲染
- 如果要执行复杂的数据处理,建议使用自定义render方法来渲染列表
- 列表渲染,建议使用map()方法
- 列表循环,一定要有key,key可以帮助diff算法快速的找到更新的节点,避免列表全部更新