设置状态的使用以及反应中同步和异步的使用
  • 作者:admin
  • 发表时间:2021-03-20 07:52
  • 来源:未知

本文主要介绍了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)哪些场景是同步的?