javascript - 如何在<Provider>中使用另一个<Consumer>?

标签 javascript reactjs

./App.js

import React from "react";
import ReactDOM from "react-dom";
import { Provider } from './context.js';
import { Provider as Provider2 } from './context2.js';
import Child from './Child.js';

import "./styles.css";

class App extends React.Component {
    render () {
        return (
            <Provider number={1}>
                <Provider2 number2={2}>
                    <Child/>
                </Provider2>
            </Provider>
        );
    }
}

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

./Child.js

import React from 'react';
import { Consumer } from './context.js';

class Child extends React.Component {
    render() {
        return (
            <Consumer>
                {(value) => (
                    <div>{value.number}</div>
                )}
            </Consumer>
        );
    }
}

export default Child;

./context.js

import React, { createContext } from 'react';
import { Consumer as Consumer2 } from './context2.js';

const Context = createContext(undefined),
      Consumer = Context.Consumer;

class Provider extends React.Component {
    render () {
        return (
            <Consumer2>
                {(value) => (
                    <Context.Provider value={{ number:(this.props.number + value.number2) }}>
                        {this.props.children}
                    </Context.Provider>
                )}
            </Consumer2>
        );
    }
}

export { Consumer, Provider };

./context2.js

import React, { createContext } from 'react';

const Context = createContext(undefined),
      Consumer = Context.Consumer;

class Provider extends React.Component {
    render () {
        return (
            <Context.Provider value={{ number2:this.props.number2 }}>
                {this.props.children}
            </Context.Provider>
        );
    }
}

export { Consumer, Provider };

您好,正如您所看到的context.js,我在中使用Consumer2提供商。 但我收到错误值未定义

当我将 Provider2 放入 Provider 中时,它运行良好。

但我想从服务器设置一个值,所以我必须在 App.js 中使用 Provider2>.

您可以在 https://codesandbox.io/s/py5jrj8n07 上进行测试.

有什么好的办法吗?感谢您的阅读:)

最佳答案

Provider 尝试使用 Provider2 的值。在你的index.js(应用程序)文件中,你必须切换提供者的位置,让它们能够以正确的顺序使用。 Provider2 不从 Provider 消费,所以这应该有效:

<Provider2 number2={2}>
  <Provider number={1}>
    <Child />
  </Provider>
</Provider2>

关于javascript - 如何在<Provider>中使用另一个<Consumer>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53772037/

相关文章:

javascript - $.get 中的 setState

javascript - Promise.all 然后 (js)

javascript - 如果没有可用的应用程序,则显示消息

javascript - 按类别对 JSON 内容进行排序

reactjs - 使用 Firebase 远程配置而不是 .env 文件

reactjs - SyntaxHighlighter 与 webpack 和 React

javascript - AngularJS:如何在 UI-Router 中将一种状态设置为全局父级(使用模式作为公共(public)部分)

javascript - 如何检查电子邮件验证?

javascript - React.js 从不同的按钮调用按钮单击

javascript - 如何将上下文传播到路由器组件。 react 堆