基础知识 - 属性与状态的区别
属性vs状态
- 相似点:
都是纯js对象,都会触发render更新,都具有确定性(状态数据相同,结果相同)
- 不同点:
TIP
- 属性能从父组件获取 ,状态不能
- 属性可以由父组件修改,状态不能
- 属性能在内部设置默认值,状态也可以,设置方式不同
- 属性不在组件内部修改,状态需在组件内部修改
- 属性能设置组件初始值,状态不能
- 属性可以修改子组件的值,状态不能
state
的主要作用是用于组件内部的 保存、控制、修改自己可变状态。state
在组件内部初始化,可以被组件自身修改,而外部不能访问且不可修改,你可以认为 state
是一个局部的 只能被组件自身控制的数据源。state
中 状态 可以通过 this.setState
方法进行更新,setState
会导致组件重新渲染
props
的主要作用是让使用该组件的父组件可以传入参数来配置该组件。它是外部传进来的参数,组件内部无法控制与修改,除非外部组件主动传入新的props
,否则组件的props
永远保持不变
没有state的组件叫 无状态组件(stateless component)
设置了state的叫做 有状态组件(stateful component)
应为状态会带来管理的复杂性,我们尽量多写无状态组件,少写有状态组件。降低维护成本,增加复用性。