【发布时间】:2017-04-23 03:47:29
【问题描述】:
我在上下文中有如下语言设置
class LanguageProvider extends Component {
static childContextTypes = {
langConfig: PropTypes.object,
};
getChildContext() {
return { langConfig: 'en' };
}
render() {
return this.props.children;
}
}
export default LanguageProvider;
我的应用程序代码如下所示
<LanguageProvider>
<App>
<MyPage />
</App>
</LanguageProvider>
我的页面有一个切换语言的组件
<MyPage>
<LanguageSwitcher/>
</MyPage>
LanguageSwitcher 在这个MyPage 需要更新上下文以将语言更改为'jp',如下所示
class LanguageSwitcher extends Component {
static contextTypes = {
langConfig: PropTypes.object,
};
updateLanguage() {
//Here I need to update the langConfig to 'jp'
}
render() {
return <button onClick={this.updateLanguage}>Change Language</button>;
}
}
export default LanguageSwitcher;
如何从 LanguageSwitcher 组件内部更新上下文?
【问题讨论】:
-
你读过这个吗? facebook.github.io/react/docs/context.html#updating-context 也许这更适合状态而不是上下文
-
@azium 是的。在该文档中,上下文是从组件本身更新的,或者在文档中添加了博客链接,其中包含作为道具传递给上下文提供者的上下文我需要更新它从子组件
-
为其他人更新:自从@azium 的评论以来,该方法可能已经改变,因为该文档确实提供了一种从子组件更新上下文的方法:“通常需要从一个组件更新上下文嵌套在组件树的某个深处。在这种情况下,您可以通过上下文向下传递一个函数,以允许使用者更新上下文。”
-
@LondonRob 您在寻找什么样的规范答案? IMO 文档的内容对我来说看起来很好。如果您想在孩子中设置上下文,只需在提供者的组件中创建一个设置器并将其传递给子消费者。然后在子消费者中调用该设置器并将其设置为子消费者中的任何数据。仍然坚持 React 提升数据的想法。
-
@azium 只是提醒其他人多年后阅读此评论。现在支持从子组件更新上下文并且非常简单:hyp.is/FiP3mG6fEeqJiOfWzfKpgw/reactjs.org/docs/context.html
标签: javascript reactjs react-context