Значение не передается через React Context API - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь переписать свое приложение, используя React Context API, но столкнулся со следующей проблемой - значение, которое я хотел бы передать через Provider to Consumer, не передается.

Исходное состояние:

let initialState = {
    ve: 'randomValue'
};

export default initialState;

Поставщик:

import React, {Component} from 'react';
import MyContext from './myContext';

import initialState from './initialState';

class MyProvider extends Component{
constructor(props) {
    super(props);
    this.state = initialState;
}

render() {
    return(
        <MyContext.Provider value={{
            state: this.state,
        }}>
            {this.props.children}
        </MyContext.Provider>
    )
    }
};

export default MyProvider;

Потребитель:

import React, {Component} from 'react';
import {Text, View} from 'react-native';

import MyContext from './Context/myContext';

export default class App extends Component {
  render() {
    return (
      <MyContext.Consumer>
        {context => (
          <View>
            <Text>
              {context}
            </Text>
          </View>
        )}
      </MyContext.Consumer>
    );
  }
}

Iне выдает никаких ошибок, но также не имеет значения Context.

1 Ответ

0 голосов
/ 24 февраля 2019

Вам также необходимо использовать компонент Provider где-то над компонентом MyContext.Consumer.

Пример

const initialState = {
  ve: "randomValue"
};
const MyContext = React.createContext();

class MyProvider extends React.Component {
  constructor(props) {
    super(props);
    this.state = initialState;
  }

  render() {
    return (
      <MyContext.Provider
        value={{
          state: this.state
        }}
      >
        {this.props.children}
      </MyContext.Provider>
    );
  }
}

class App extends React.Component {
  render() {
    return (
      <MyProvider>
        <MyContext.Consumer>
          {context => <div>{JSON.stringify(context)}</div>}
        </MyContext.Consumer>
      </MyProvider>
    );
  }
}

ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

<div id="root"></div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...