【问题标题】:How to get updated Context's state values to it's child components?如何获取更新上下文状态值到其子组件?
【发布时间】:2020-06-13 19:45:40
【问题描述】:

我正在开发一个反应应用程序,所以我需要在 Context 组件的状态发生变化时立即更新 Context 组件的所有子组件,但我无法获取更新后的上下文值。

export default class Home extends Component{
    state = {
       user:{name:"Rob"},

    }
    componentDidMount() {
        this.setState({user:this.context.user});
    }

    render(){
         return(
              <DetailsConsumer>
                   {value=>(
                        <button onClick={value.setName} >
                    )}
              </DetailsConsumer>



);
} 
class DetailsProvider extends Component{

    state={
       user:{}
    }


     setName= ()=>{
        this.setState({user:{name:"Hasindu"}})
     }
    render(){
        return(<DetailsContext.Provider value={
            {user:this.state.user,

                changeName:this.changeName

            }
        }>

            {this.props.children}
        </DetailsContext.Provider>);
    }
}

const DetailsConsumer = DetailsContext.Consumer;
export{DetailsConsumer,DetailsProvider,DetailsContext};

所以我需要的是,当我单击 Home 类的按钮并调用 DetailsProvider (Context) 的 setName() 方法时,我需要将上下文状态更新为 setName() 方法中的对象,我还需要获取更新后的值到我的 Home 类。[这意味着我需要使用该新值更新我的 Home 组件状态属性用户]

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    问题是您的Home 组件正在复制上下文状态,因此在上下文状态更新时没有更新其状态。解决此问题的最佳方法是删除 Home 中的重复状态并直接使用上下文状态。

    export default function Home(){    
         return(
              <DetailsConsumer>
                   {value=>(
                        <>{value.user.name}: <button onClick={value.setName} /></>
                    )}
              </DetailsConsumer>
         )
    } 
    

    【讨论】:

    猜你喜欢
    • 2021-07-04
    • 2021-07-31
    • 2021-06-25
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多