setState更新原理:
- setState 是异步更新数据
- setState多次调用, 不依赖前面setState(console.log() 值是一样)
- 多次调用,只会触发一次重新渲染
推荐语法:
setState((state,props)=>{
return{
num:state.num+1
}
})
参数state,表示最新的state
参数props,表示最新的props
setState第二个参数:
setState((state,props)=>{
return{
num:state.num+1
}
},()=>{
console.log('状态更新后,页面渲染完成,立即执行回调')
})
组件更新机制:
- setState两个作用:1.修改state 2.更新组件UI
- 过程:父组件重新渲染时,也会重新渲染子组件,但是只会渲染当前组件的子树
减轻state:
- 只存储跟组件渲染相关的数据
- 不用做渲染的数据不用放在state中
- 多个方法中用都得数据,放在this中
避免没必要的重新渲染:
- 使用钩子函数 shouldComponentUpdate(nextProps,nextState)
- 渲染时机 shouldComponentUpdate > render
纯组件:
setState 对象类型修改方法:
虚拟 dom 和 diff 算法:
虚拟 dom 本质上就是js对象,用来描述你希望在屏幕上看到的内容