是否有可能将上下文传递到用ReactDOM.render实例化的组件中?
Is it possible to pass context into a component instantiated with ReactDOM.render?
TL;DR给定以下示例代码:
ReactDOM.render(<MyComponent prop1={someVar} />, someDomNode);
是否可以手动将React context
传递到MyComponent
的实例中?
我知道这听起来像是一个奇怪的问题,考虑到React的性质,但是用例是我将React与语义UI (SUI)混合在一起,这个特定的用例是在工具提示第一次显示时惰性加载SUI工具提示的内容(工具提示的内容是使用与上面相同代码模式的React组件)。所以它不是由另一个React组件隐式创建的React组件,这似乎打破了context
链。
我想知道我是否可以手动保持context
链,而不是有组件需要在context
和props
中查找某些数据。
React version: 0.14.8
No。在react 0.14之前,有React.withContext
方法,但它被删除了。
import React from 'react';
function createContextProvider(context){
class ContextProvider extends React.Component {
getChildContext() {
return context;
}
render() {
return this.props.children;
}
}
ContextProvider.childContextTypes = {};
Object.keys(context).forEach(key => {
ContextProvider.childContextTypes[key] = React.PropTypes.any.isRequired;
});
return ContextProvider;
}
并按如下方式使用:
const ContextProvider = createContextProvider(context);
ReactDOM.render(
<ContextProvider>
<MyComponent prop1={someVar} />
</ContextProvider>,
someDomNode
);
在React 15和更早的版本中,您可以使用ReactDOM.unstable_renderSubtreeIntoContainer
而不是ReactDOM.render
。第一个参数是要传播上下文的组件(通常为this
)
在React 16及以后的版本中有"Portal"API: https://reactjs.org/docs/portals.html
相关文章:
- 如何在GoogleWeb工具包(GWT)中从JSNI调用接口(实例化)
- 如何在用户输入时实例化数组
- 在requirejs中共享实例化对象
- Mongoose TypeError:实例化模式类型的对象时,对象不是函数
- Angular重命名模块后未能实例化模块
- Backbone relational无法实例化两个RelationalModel对象
- 我应该如何用javascript实例化这个日期
- AngularJS出错-无法实例化模块
- 谷歌地图重叠MarkerSpiderfier实例化问题
- 未捕获错误:由于,[$injector:moduler]未能实例化模块polmgr
- ngRoute不是因果报应实例化的
- JavaScript 中的动态实例化
- 在文本框上绑定谷歌地点自动完成,而无需实例化谷歌地图
- UI5 路由不实例化视图
- 在 JavaScript 中,当我们实例化派生对象时,原型的函数隐藏在哪里
- 仅在需要时实例化聚合物元素
- 角度 JS 控制器未实例化
- 如何理解“当类实例化时,JavaScript静态方法也是不可调用的”
- 在 Typescript 中实例化对象,遵循松散耦合
- 是否有可能将上下文传递到用ReactDOM.render实例化的组件中?