在React中引用组件外部的变量
Reference a variable out side the component in React?
这似乎是一个愚蠢的问题,但我很好奇这是否可能(建议)。考虑以下内容:
export default class Example extends Component {
constructor(props){
super(props);
this._variable = value;
}
render() {
return (<div>{this.props.children}</div>);
}
}
现在我知道我可以把this._variable
传给孩子,这样:
this._childrenWithProps = React.Children.map(this.props.children,
(child) => React.cloneElement(child, {
variable: this._variable,
})
);
现在每个孩子都可以访问this.props.variable
。但是(我不完全理解这个概念)我可以使用上下文或类似的东西来能够:
// In another component some where ...
render() {
// reference variable (this._variable, or variable) here
<Example>
// Children here ...
</Example>
}
上下文是用来做这个的吗?还是我做错了什么可怕的事?实际上我想要引用这个。_variable放在元素外面,但是把它设置在元素里面。这可能吗?
是的,您可以使用上下文将变量传递给组件的所有后代,但作为一般经验法则,如果您不是绝对需要它,您应该避免使用上下文。上下文破坏了React的数据流模式,通常使代码更难阅读,因为props可能是隐式的而不是显式的。根据文档:
一般来说,上下文最适合用于主题信息之类的内容,它在某些路由库中也很有用。通常有一个更好的方法来传递数据(你的使用上下文将使您的代码更难理解,因为它使数据流不太清晰。这类似于使用全局变量在应用程序中传递状态。
cloneElement
对React.Children
的例子是完全好的,一个相当常见的代码片段,你会发现在很多React项目)。
如果在发出警告后仍然希望使用context,那么需要对提供上下文(通常是包装器)的组件和接收上下文的组件进行一些调整。
您的上下文提供程序需要一个getChildContext
函数,该函数返回您希望对其所有子对象可用的上下文对象。您还需要将childContextTypes
作为类的属性声明。
class Example extends Component {
getChildContext() {
return { variable: 'foo' };
}
render() {
return (<div>{this.props.children}</div>);
}
}
Example.childContextTypes = {
variable: React.PropTypes.string
};
然后,无论您在哪里定义将作为子组件传递的组件,您希望接收上下文,您都需要添加相同的childContextTypes
属性。它将通过this.context
对象访问上下文。
class Child extends Component {
render() {
return (<div>{this.context.variable}</div>);
}
}
Child.childContextTypes = {
variable: React.PropTypes.string
};
写childContextTypes
是必须的。如您所见,使用上下文并不总是意味着更少的代码。
相关文章:
- 定义函数时,如何捕获外部变量的当前值
- jQuery:如何访问外部变量
- 成功回调中的外部变量未正确更新
- 如何通过pickink外部变量在jsfiddle中执行javascript函数
- JQuery 承诺:访问外部变量或将结果传递给 .done 内部的 IIFE
- JsRender:使用 if 语句将 JSON 对象中的值与外部变量进行比较
- jQuery 函数中的外部变量和作用域
- 在 JavaScript 中维护函数外部变量的值
- 如何从传入的预定义回调访问外部变量
- 基于外部变量重新编译指令
- 从函数更改外部变量
- 从AJAX函数中修改外部变量
- 如何通过Javascript在MongoDB 'where'查询中使用外部变量
- 访问Promise链中的外部变量
- Javascript 构造函数,使用引用其他变量的外部变量进行闭包
- 如何在Angular.js指令中将service.js的内部查询结果绑定到外部变量
- 如果内部函数没有'不要使用外部变量的任何变量
- JS如何访问外部变量's函数
- 从@foreach循环内部访问外部变量
- Javascript:访问匿名函数中的外部变量