react组件状态同步-状态提升

2023-11-19

假设定义组件TemperatureInputSon

import React from 'react'

class TemperatureInputSon extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            content: ''
        }
    }

    handleChange = (e) => {
       this.setState({content: e.target.value})
    }

    render() {
        return (
            <input type='text' type='text' value={ this.state.content } onChange={ this.handleChange }/>
        )
    }
}

export default TemperatureInputSon

然后再定义组件

import React from 'react'
import TemperatureInputSon from "./TemperatureInputSon";

class TemperatureInput extends React.Component {
    constructor(props) {
        super(props);
    }


    render() {
        return (
            <div>
                <TemperatureInputSon/>
                <br/>
                <TemperatureInputSon/>
            </div>
        );
    }
}

export default TemperatureInput

此时获得俩input框

此时由于俩子组件使用各自state,所以即使1框输入2框也不变

但是我们需要保持它们的数据一致,这时候就需要用到“状态提升 ”,简单来说就是子组件的值不再存在state,由父组件state共同管理,子组件通过接收props保持数据一致。

修改组件TemperatureInput 让它将值传给TemperatureInputSon 

    //新建state管理数据
    this.state = {
        content: ''
    }

    //事件处理
    handleContentChange = (e) => {
        this.setState({content: e})
    }


            <div>
                <TemperatureInputSon content={this.state.content} onContentChange={this.handleContentChange}/>
                <br/>
                <TemperatureInputSon content={this.state.content} onContentChange={this.handleContentChange}/>
            </div>

TemperatureInputSon调用TemperatureInput组件数据发生变化时触发handleContentChange

TemperatureInput组件的handleContentChange(e)接收到e以后更新state并且传给TemperatureInputSon组件

那么一次状态提升就这么完成了

(不得不说react官网翻译写得是真TM拗口,不过清楚后再看的话,会觉得他们写得其实挺具体的,就是不大友好)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

react组件状态同步-状态提升 的相关文章