React - 新的 Context API 不适用于 Class.contextType,但适用于 Context.Consumer

Posted

技术标签:

【中文标题】React - 新的 Context API 不适用于 Class.contextType,但适用于 Context.Consumer【英文标题】:React - New Context API not working with Class.contextType, but works with Context.Consumer 【发布时间】:2019-04-06 04:47:05 【问题描述】:

我正在尝试使用返回包装组件的 HOC 的新上下文 API。当我使用Class.contextType = Context 方法时它不起作用:

return function myHOC(WrappedComponent) 
  class HOC extends React.Component 
    // static contextType = MyContext;

    render() 
      console.log(this.context);  // HERE, this logs ``

      // ..do stuff
      return <WrappedComponent ...this.props />
    
  
  HOC.contextType = MyContext;

  return HOC;
;

但是,我编写了相同的代码,但使用了&lt;MyContext.Consumer&gt;,它运行良好:

return function myHOC(WrappedComponent) 
  const HOC = (props) => (
    <MyContext.Consumer>
      (context) => 
        console.log(context);  // HERE, correct values

        return <WrappedComponent ...props /> 
      
    </MyContext.Consumer>
  );

  return HOC;
;

我在这里没有看到什么吗?

【问题讨论】:

对于像我这样正在寻找被重定向到这个问题的 Class.contextType 和 Context.Consumer 之间的区别的其他人,这是一个答案:***.com/questions/54283509/… 【参考方案1】:

事实证明,即使我将 react-scripts 更新为 2.0,我也必须自己将 react 更新为 16.6(之前是 16.3)。

我的印象是 react-scripts 也会处理 react 版本。我的错,在那里搞糊涂了。

【讨论】:

我仍在为 console.log(this.context) 获取 。更新了 react-scripts 版本和 react 版本。你能帮我吗

以上是关于React - 新的 Context API 不适用于 Class.contextType,但适用于 Context.Consumer的主要内容,如果未能解决你的问题,请参考以下文章

[译]迁移到新的 React Context Api

新的 React Context API 会触发重新渲染吗?

新的 React Context API + LocalStorage + Subscribe(替代 Redux)

在组件之间路由时如何保持 React 新的 Context API 状态?

React API

React Context API 很慢