当前位置: 首页 > 面试题库 >

是否可以将上下文传递到使用ReactDOM.render实例化的组件中?

贾俊喆
2023-03-14
问题内容

TL; DR给出以下示例代码:

ReactDOM.render(<MyComponent prop1={someVar} />, someDomNode);

是否可以手动将React传递context到的实例MyComponent

考虑到React的性质,我知道这听起来像一个奇怪的问题,但是用例是我将React与语义UI(SUI)混合在一起,并且这种特定情况是延迟加载SUI工具提示的内容(该工具提示的内容是首次显示工具提示时,使用与上述相同的代码模式生成一个React组件。因此,这不是由另一个React组件隐式创建的React组件,它似乎断了context链。

我想知道是否可以手动保持context链运行,而不是使用需要在contextAND中查找某些数据的组件props

反应版本:0.14.8


问题答案:

否。在进行0.14反应之前,存在方法React.withContext,但已将其删除。

但是,您可以通过使用上下文创建HoC组件来做到这一点,就像这样:

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
);


 类似资料:
  • 问题内容: 我有一个带有一些componentDidMount逻辑的React组件: 是否可以通过props传递此组件,以便componentDidMount()中的所有内容都被执行,以某种方式伪造以便截取屏幕截图?遵循以下原则: 我知道我可以使用,但是我有一些复杂的登录逻辑,我想使用这样的快捷方式来避免,而是将所有需要的道具直接传递给组件? 问题答案: 在这里回答了这个问题。让我们在这里尝试相同

  • 在客户端,我想使用这个endpoint,但不确定如何在主体中传递字符串流(我不想将其设置为列表)

  • 问题内容: 我不想使用jQuery,但我想使用Ajax进行文件上传。那可能吗? 如果是这样,我在哪里可以找到有关信息/教程? 问题答案: 不,无法使用javascript执行此操作。 但是,为了给人“ AJAX”的感觉,您可以向隐藏的iframe提交表单,然后将脚本结果输出到其中,然后从那里进行处理。Google 并从那里开始。 如果您使用的是jQuery,并且您的表单中包含任何文件字段,也可以使

  • 在Vue 2.0应用程序中,假设我们有组件a、B和C。 A声明、登记和使用B 有可能把C从A传到B吗? 像这样的东西: 在B中使用C。 动机:我想创建一个通用组件,它在中使用,但从其子接收。实际上,将使用多次向其传递不同的“C”。 如果这种方法不正确,在Vue中正确的方法是什么? 回答@Saurabh 我没有作为道具通过,而是尝试了B中的建议。 基本上我是在尝试渲染设备,但是动态方式 我在控制台中

  • 根据官方文档,提供搜索界面有两种方式:使用搜索对话框或小部件。我想注意使用这两种方法传递搜索上下文数据。 所以,留档说: ..您可以提供附加数据,以便系统发送到您的可搜索活动。您可以传递APP_DATA包中的附加数据,它包含在ACTION_SEARCH意图中。 要将此类数据传递给您的可搜索活动,请重写用户可以从中执行搜索的活动的onSearchRequest()方法,使用附加数据创建一个Bundl

  • 问题内容: 是否可以取消使用隐藏iframe的文件上传? 我尝试将iframe的源设置为空字符串,但上传并未中断。 问题答案: iframe是承载表单过帐的传输渠道,因此Atanas是正确的,您必须停止iframe内部的传输。 这是一种取决于浏览器的方法: