之前我们没有学习组件状态之前,我们只能通过重新渲染组件来更新组件,现在我们有了组件状态这个东西,我们可以通过更改组件的state,来更改组件的状态。
那么关于state有几点是需要注意的:
- state的初始化必须在构造函数中
- state的更改必须通过setState函数,这个函数可以直接接受一个state对象,也可以接受一个函数,函数有两个参数,一个是prevState,一个是props,就是如果我们要用到上一个state或者props,我们就需要传入一个函数。那我们可能会说,我直接使用this.props或者this.state不行吗,我试了一下,貌似是可以实现的,但是官方说了,this.props和this.state可能是异步更新的,所以我们还是写在回调函数中比较好,这样也比较规范。
- 当state是一个比较复杂的对象的时候,就比如里面还有多个对象的引用,那么我们可能只需要单独的更新某个对象的值,那么我们用setState的时候是只用传这个对象的值呢,还是要传入state中所有的值呢,答案是只需要传入改变的那个值,因为setState是对state对象做一个合并的操作,并不是替换。
- 由于组件的state只跟组件本身有关,组件都不应该去关心别的组件的state或者props,但是我们可以把组件的state或者props作为子组件的props输入进去,这样子组件其实就获取到了父组件的值,而子组件内部是不知道props来自哪里的,我们称这样子的数据流是单向数据流或者自顶向下的数据流,因为数据只能向子组件传输,可以把它想象成一个瀑布。
网友评论