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

在React v16.6中如何在新的CONTEXT API中获取多个静态上下文

司承业
2023-03-14
问题内容

嗨,我正在尝试访问组件中的多个上下文,但是我仅从提供者那里获得了一个上下文值就获得了成功。有两个提供程序ListContext和`MappingContext。我如何访问这样的上下文:

class TableData extends React.Component {
 static contextType = ListContext;
 static contextType = MappingContext;

 componentDidMount() {
   const data = this.context // it will have only one context from ListContext
  }

我知道我可以在render()中使用多个提供程序,但我想访问上面的上下文。任何帮助将不胜感激。

谢谢


问题答案:

一种解决方法是使用将两个上下文合并为一个包装器,然后导出包装器。有多种实现包装器的方法,但这是一种:

Contexts.js

import React from "react";

export const Context1 = React.createContext("1");
export const Context2 = React.createContext("2");
export const ContextCombined1And2 = React.createContext("3");

ProvideCombinedContext.js

import React from "react";
import { Context1, Context2, ContextCombined1And2 } from "./Contexts";

// This is a reusable piece that could be used by any component that requires both contexts.
const ProvideCombinedContext = props => {
  return (
    <Context1.Consumer>
      {context1 => (
        <Context2.Consumer>
          {context2 => (
            <ContextCombined1And2.Provider value={{ context1, context2 }}>
              {props.children}
            </ContextCombined1And2.Provider>
          )}
        </Context2.Consumer>
      )}
    </Context1.Consumer>
  );
};
export default ProvideCombinedContext;

Need2Contexts.js

import React from "react";
import { ContextCombined1And2 } from "./Contexts";
import ProvideCombinedContext from "./ProvideCombinedContext";

class Need2Contexts extends React.Component {
  static contextType = ContextCombined1And2;
  componentDidMount() {
    console.log("Context=" + JSON.stringify(this.context));
  }
  render() {
    return "this.context=" + JSON.stringify(this.context);
  }
}

const WrappedNeed2Contexts = props => {
  return (
    <ProvideCombinedContext>
      <Need2Contexts {...props} />
    </ProvideCombinedContext>
  );
};

export default WrappedNeed2Contexts;

index.js

import React from "react";
import ReactDOM from "react-dom";
import { Context1, Context2 } from "./Contexts";
import Need2Contexts from "./Need2Contexts";

function App() {
  return (
    <div className="App">
      <Context1.Provider value="value1">
        <Context2.Provider value="value2">
          <Need2Contexts />
        </Context2.Provider>
      </Context1.Provider>
    </div>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

您可以在实际中看到它并在此处进行操作:



 类似资料:
  • 问题内容: 我有一个函数试图将文件加载到对象,因为示例项目是这样说的。 我尝试使用,但仍无法编译。 我是Java的新手,所以我知道自己做错了。 问题答案: 它无法编译,因为使用资源名称(a ,而不是a )作为参数,以便使用类加载机制(从类路径)加载资源。与一起使用是没有意义的。如果要打开文件,只需使用或即可。 请参阅http://docs.oracle.com/javase/6/docs/api/

  • 问题内容: 我想先从文件中读取字符串,然后再执行小部件上的任何其他操作,那么如何在没有活动对象调用的情况下做到这一点呢? 问题答案: 例如,创建的子类 在中设置标签的属性以指向你的新类,例如 在你的应用实例的方法中,将你的上下文(例如this)保存到一个名为的静态字段中,并创建一个返回此字段的静态方法,例如: 这是它的外观: 现在,你可以使用:每当你想要获取上下文时,然后使用(或)。

  • 我试着用正常的方式做吐司。但我得到了错误,我尝试了很多倍数源,但失败了。

  • 问题内容: 假设我有ID为3、4、7、9的记录,并且我希望能够通过下一个/上一个链接导航到另一个。问题是,我不知道如何获取具有最近的较高ID的记录。 因此,当我有一个ID为4的记录时,我需要能够获取下一个现有记录,即7。查询可能看起来像 如何获取下一个/上一个记录而不获取整个结果集并手动进行迭代? 我正在使用MySQL 5。 问题答案: 下一个: 以前:

  • 问题内容: 我在构建ORM库时要考虑到重用和简单性。一切都进行得很好,除了我被愚蠢的继承限制所困。请考虑以下代码: 显然,这不是我所期望的行为(尽管实际行为也很有意义)。因此,我的问题是,你们是否知道在父类中获得子类名称的意思。 问题答案: 简而言之。这不可能。在php4中,您可以实施可怕的破解(检查),但是该方法在PHP5中不起作用。参考资料: 37684 34421 编辑 :PHP 5.3中后

  • 我想在Spring MVC中填充一个下拉框,我试图这样做,但是我得到了空指针异常 这是我的控制器: 这是我的服务方法: 这是我的 DAO 方法: 最后这是我的JSP页面: 这是堆栈跟踪: sun.reflect.NativeMethodAccessorImpl上com.easylib.elibrary.webapp.controller.catalog.CatalogueController.ne