所谓 状态提升 就是将各个子组件的 公共state 提升到它们的父组件进行统一存储、处理(这就是所谓的”单一数据源“),负责setState的函数传到下边的子级组件,然后再将父组件处理后的数据或函数props到各子组件中。
那么如果子组件 要 修改父组件的state该怎么办呢?我们的做法就是 将父组件中负责setState的函数,以props的形式传给子组件,然后子组件在需要改变state时调用即可。
1.
官网解释
对于react 的状态提升,官网有做详细的解释,基于官网的case,首先他是因为 两个input表单都需要用到一个用户输入的值,然后拿到这个值去做事情,这个用户输入的值,即是这个场景下需要共享的state的值,一个是直接拿去展示,一个是转算后展示到另一个表单里面。然后这个共享的值,此时即是用了 状态提升,
2.
实现方式
实现方式是 利用最近的共同的父级组件中,用props的方式传过去到两个子组件,props中传的是一个setState的方法,通过子组件触发props传过去的方法,进而调用父级组件的setState的方法,改变了父级组件的state,调用父级组件的render方法,进而同时改变了两个子级组件的render。
这是 两个有关连的同级组件的传值,因为react的单项数据流,所以不在两个组件中进行传值,而是提升到 最近的共同的父级组件中,改变父级的state,进而影响了两个子级组件的render。
当然
这也是 子级如果想改变父级组件的state的方法,向下通过props传过去setState的方法。