state是一种数据结构,在当前组件有效,使用setState进行更改,class组件中会引发组件渲染this.setState()。
函数组件中可以使用useState、useReducer.
与class组件中的setState不同的是,如果前后两次的值相同,函数组件中的useState和useReducer Hook会放弃更新,原地修改setState不会引起重新渲染
通常,不应该在react中修改本地state。然而,作为一条出路,可以用一个增长的计数器来在state没变的时候依然强制一次重新渲染:
// 在function组件中强制更新
const [ignored, foreUpdate] = useReducer(x => x+1, 0);
function handleClick() {
forceUpdate();
}
这也是function组件中类似class组件中的forceUpdate。
而props(属性“properties”缩写)是组件的属性值,由父组件传递过来,就是组件自身来说,props是不可变的,组件不能改变自己的props,但是可以把子组件的props放在一起统一管理,props可以是多种数据类型,如对象、函数等。
props 和 classstate 都是普通的JavaScript对象。它们都是用来保存信息的,这些信息可以控制组件的渲染输出,而它们的一个重要不同点是:props是传递给组件的(类似于函数的形参),而state是在组件内被组件自己管理的(类似于在一个函数内声明的变量
一个参数值到底要不要放在state中去,取决于该参数值会不会变,并且改变后要不要跟新页面