组件的数据承载 (props属性 | state状态)
props属性一般是从外部传入的,组件内部是不能对外部传入进来的属性进行更改,自己只是拿来用的。
state状态是组件自身定义的,后续组件可以对于自身定义的状态进行更改。
更改state的值
更改state值,不能直接更改,因为直接更改的话视图不会同步的渲染
对于状态的改变我们可以使用setState的方法去改变组件自身的状态。
this.setState({
key:新的value值
}[,callback])
setState更改状态,是异步的。所以后续获取不到组件更新后的最新状态。
如果想要获取组件最新的状态,需要再setState的callback回调函数中获取即可。
注意:上面的写法有一个问题,连续执行多次其实内部进行了对象的合并操作。解决这个问题的方法:
this.setState((prevState)=>{
return {
key:新的value值
}
},[,callback])
属性和状态的对比
**相似点:**都是纯js对象,都会触发render更新,都具有确定性(状态/属性相同,结果相同)
不同点:
- 属性能从父组件获取,状态不能
- 属性可以由父组件修改,状态不能
- 属性能在内部设置默认值,状态也可以
- 属性不在组件内部修改,状态可以
- 属性能设置子组件初始值,状态不可以
- 属性可以修改子组件的值,状态不可以
state的主要作用是用于组件保存、控制、修改自己的可变状态。**
state在组件内部初始化,可以被组件自身修改,而外部不能访问也不能修改**。你可以认为
state是一个局部的、只能被组件自身控制的数据源。**
state中状态可以通过
this.setState方法进行更新,
setState` 会导致组件的重新渲染。**