react上下文提供者和消费者

IT技术 javascript reactjs
2021-04-27 15:58:44

主题上下文.js

import React from 'react';

const ThemeContext = React.createContext(null);

export default ThemeContext;

父组件

import ThemeContext from './ThemeContext';

class A extends React.Component {
  render() {
    return (
      <ThemeContext.Provider value={'green'}>
        <D />
      </ThemeContext.Provider>
    );
  }
}

组分 C 低于组分 D。

import ThemeContext from './ThemeContext';

class C extends React.Component {
  render() {
    return (
      <ThemeContext.Consumer>
        {coloredTheme =>
          <div style={{ color: coloredTheme }}>
            Hello World
          </div>
        }
      </ThemeContext.Consumer>
    );
  }
}

让我含糊不清的是,我们正在从提供者(组件 A)和消费者(组件 C)导入“ThemeContext.js”。那么这两个组件如何共享一个 ThemeContext 实例(消费者如何在不共享一个的情况下访问提供者上下文),两者都有自己的 ThemeContext 呢?

1个回答

Provider父代和Consumer后代之间的关系允许它们之间共享值。

<ThemeContext.Consumer>inC具有<ThemeContext.Provider value={'green'}>父级,因此它能够访问green上下文值作为coloredTheme回调参数。

两者都有自己的 ThemeContext?

ES module被评估一次并导致单例。ThemeContext是上下文对象。ACmodule中是相同的