Задать вопрос
Muranx
@Muranx
кто понял this тот в цирке не смеётся

Как правильно передавать контекст между файлами в react?

Здравствуйте, вопрос новичка в react!

Пытаюсь разобраться с передачей контекста в реакте через несколько детей , но везде в статьях пример, где все компоненты созданы в глобальной области, и имеется доступ к переменной содержащей контекст, как в примере ниже..
var Context = React.createContext('123');

class FirstComponent extends React.Component{
  render(){
    return (
     	<SecondComponent />
    )
  }
};

class SecondComponent extends React.Component{
  render(){
    return (
        <ThirdComponent /> 
    )
  }
};

class ThirdComponent extends React.Component{
  static contextType = Context;
  render(){
    return <h1>{this.context.greetings}</h1>; // Ola
  }
};

ReactDOM.render(
  <Context.Provider value={{greetings: 'Ola'}}>
    <FirstComponent />
  </Context.Provider>,
  document.getElementById('root')
);

Этот пример работает, но разумеется "компоненты - дети" будут больше (в плане объема кода) и держать все их в одном файле не реально, так как быть? В глобальной области в примере выше, я могу прописать в самом дальнем от вершины дерева потомке static contextType = Context; и он его найдёт легко, т.к. переменная Context находится в глобальной области, НО а если всех детей разнести по файлам, мы же не сможем получить доступ к этой переменной Context в файле с самым отдалённым от верхушке ребёнком... Как быть? Через пропы передавать состояние, ну это явно не выход т.к. контекст от части и создан чтобы НЕ передавать через 10 детей пропы, может я где-то был не внимателен, или недостаточно хорошо искал, в любом случае для вас это изи решение, если конечно подскажете!
  • Вопрос задан
  • 215 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Mashush
Так вот же в официальной документации по React написано как передавать контекст между компонентами. Причем сказано как про классовые компоненты (ParentContext.Provider => ParentContext.Consumer), так и про функциональные (ParentContext.Provider => useContext(ParentContext).

Просто сам контекст из родительского компонента экспортировать:

export const ParentContext = React.createContext('123')


позднее в дочернем компоненте написать:

import {ParentContext} from '...'
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы