Использование контекста для связи между компонентами не рекомендуется? - PullRequest
0 голосов
/ 03 октября 2018

После прочтения официальной документации по контексту (https://reactjs.org/docs/context.html), У меня есть ощущение, что его использование должно в основном ограничиваться ситуациями, когда у нас есть некоторые переменные, которые мы могли бы считать «глобальными», которые мы должны отправить многим компонентам на разныхуровни вложенности (например, текущая тема, языковой стандарт, текущий аутентифицированный пользователь).

Контекст предназначен для совместного использования данных, которые можно считать «глобальными» для дерева компонентов React, таких как текущий аутентифицированный пользователь,тема или предпочитаемый язык.

и

Контекст используется главным образом, когда некоторые данные должны быть доступны для многих компонентов на разных уровнях вложенности.повторное использование компонента сложнее.

Я хотел бы использовать Context для облегчения связи между компонентами, которые находятся далеко друг от друга в дереве компонентов. Многие пользователи использовали Redux для этого (хотя это не является его основной целью)который не был обескуражен подобным образом, хотяru Используемый с React (с помощью пакетаact-redux) такой подход основан на Context.

Есть ли какой-либо недостаток в том, что Context сравнивает с redux + response-redux (исключая тот факт, что Redux использует другой способобновить состояние), что должно заставить меня не использовать контекст в описанном сценарии?Документы говорят, что это затрудняет повторное использование компонентов.Как он это делает, и разве это не относится и к дуэту + реакция-редуксу?

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Это не препятствует и может использоваться для связи компонентов на разных уровнях вложенности.

Есть ли какой-либо недостаток, который Context сравнивает с redux + реагировать-избыточным (исключая тот факт, что Redux имеетдругой способ обновления состояния), который должен заставить меня не использовать контекст в описанном сценарии?Документы говорят, что это затрудняет повторное использование компонентов.

Контекст React может быть менее удобным для отладки, поскольку в настоящее время он не может использовать Redux devtools.Существует проблема , которую можно наблюдать, но любое возможное решение не может охватывать взаимодействия через контекстный API, которые выполняются с функциями обратного вызова, например этот модальный пример , в то время как отправляемые действия Redux могут бытьотслеживается.

Документация не объясняет, почему его трудно использовать повторно, а «сложно» субъективно.Компонент, который опирается на контекст, накладывает скрытую зависимость от соответствующего Provider в иерархии компонентов.Он слабо связан с ним, но может работать неправильно, если нет ожидаемого значения;если Provider, Consumer по-прежнему отображается со значением undefined, это поведение нельзя изменить без ручной проверки значения.

0 голосов
/ 03 октября 2018

Мне не совсем понятен ваш вопрос.Но, как вы уже сказали, с учетом заявления от реагирующих документов,

Контекст в основном используется, когда некоторые данные должны быть доступны для многих компонентов на разных уровнях вложенности.Применяйте его экономно, потому что это затрудняет повторное использование компонента.

Что я вижу из документов: предостережение : вам может потребоваться поднять состояние.

И есть некоторые вещи, которые нужно подумать, прежде чем использовать context api в вашем проекте, если вы этого не сделаете, вы можете потерпеть неудачу.Я думаю, что это то, что вы можете вспомнить утверждение «применять его экономно, потому что это делает повторное использование компонента более сложным».Следующие пункты изложены в документации, как вы можете использовать контекстный API, который можно рассматривать как повторное использование компонентов для разных нужд:

И вы, очевидно, можете почувствовать трудность.В противном случае, я вижу, это может быть использовано, что мы можем сделать с редуксом, кроме как с логарифмическим указателем.

...