本文主要介绍了setState在React中的使用以及同步和异步的使用。通过示例代码详细介绍,对大家的学习或工作有一定的参考学习价值。需要它的朋友将和边肖一起学习。
在react中,如果直接使用this.state修改状态,不会导致组件的重新呈现,所以需要通过this.setState修改组件的属性。
1.这个的两个定义
定义初始状态
state={ count: 0 },
如果此时有一个按钮,点击按钮将计数增加1,我们可以用两种方式编写它
(1)转移对象
this . SetState({ count : this . State . count 1 })
(2)传递函数
this.setState((state,props)=({ count: count 1}))
2.设置setState的两种方式有什么区别?
如果改变后的状态的值需要依赖于上一个状态的值,这种情况需要使用函数的形式,比如下面的情况
addCount(){
this . SetState({ count : this . State . count 1 })
this . SetState({ count : this . State . count 1 })
this . SetState({ count : this . State . count 1 })
}
此时1的操作只会执行一次,因为React内部会合并很多setStates。新状态是通过合并Object.assgin({},{count3360 0},{COUNT3360 1})获得的。上面的赋值会执行三次,但是因为COUNT的值没有更新,最后执行的结果只有1。如果setstate的赋值是函数,情况就不一样了。
addCount(){
this.setState((state,props)=({ count: count 1}))
this.setState((state,props)=({ count: count 1}))
this.setState((state,props)=({ count: count 1}))
}
这个操作会得到3的效果,因为React会判断。如果函数被传入,函数将被执行,并且count的值已被修改
3.setState是同步的还是异步的?
5颗星是异步的
(1)也就是说,在我们通过this.setState修改状态后,我们不会通过在下一行输出state的值来获得新的值。
(2)为什么异步?
原因有二,一是提高效率。每次修改状态的值,都会导致渲染的重新渲染。多次合并和更新状态的值可以提高性能。其次,渲染的更新将在稍后进行。如果渲染中有子组件,子组件的道具依赖于父组件的状态,道具和状态不能一致
(3)异步状态值如何获取?
1.在setState的回调函数中
this.setState({
count: this.state.count 1}},
()={ console . log(this . state . count)})
2.在组件更新中获取它
componentdupdate(){
console.log(this.state.count)
}
5颗星星同步
(1)也就是说,在我们通过this.setState修改状态之后,其下一行的输出状态是一个新值。
(2)哪些场景是同步的?