javascript - 如何将更新后的 Context 的状态值传递给它的子组件?
问题描述
我正在开发一个反应应用程序,因此我需要在 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 组件状态属性用户]
解决方案
问题是您的Home
组件正在复制上下文状态,因此在上下文状态更新时没有更新其状态。解决此问题的最佳方法是删除重复状态Home
并直接使用上下文状态。
export default function Home(){
return(
<DetailsConsumer>
{value=>(
<>{value.user.name}: <button onClick={value.setName} /></>
)}
</DetailsConsumer>
)
}
推荐阅读
- jasmine - 执行“tns test android”时未定义文档
- xml - 加载后数据表绑定到 XML 需要修复
- java - 如何修复 buildFromSessionId(uuid) 中的 uuid 错误?
- html - 图像高度大小不会改变,只有宽度会改变
- db2 - 如何从存储过程中调用程序?
- ruby-on-rails - 在 Ruby on Rails 应用程序中将 JSON 数据从 API 端点保存到数据库
- excel - 根据单元格值查找行,仅将行的一部分复制到新工作表中,将行的其余部分复制到新工作表的下一行
- reinforcement-learning - 哪种强化学习算法适用于奖励连续可变且没有中间奖励的问题?
- python - 合并范围熊猫
- sql - 如何使用 SQL 将数据排序为 3 个按字母顺序排列的子组?