Совместное реагирование на Redux и Context api

У меня есть вопрос, по которому я не могу найти подходящий ресурс, чтобы прояснить свое мнение по этому поводу. В основном сценарий заключается в том, что я использую хранилище Redux для извлечения некоторых данных, где эти данные будут использоваться в нескольких разных компонентах, поэтому я решил создать Context Api, который подключается к хранилищу Redux и использует этот контекст в самих компонентах.

Вопрос в том, что, скажем, у меня есть 2 компонента A и B, где A является родительским, было бы более эффективно использовать контекст в родительском (A) и передавать данные в качестве реквизита дочернему элементу, или это не имело бы никакого значения, если бы Я использую контекст как в A, так и в B, поэтому мне нужно передавать меньше реквизита дочернему компоненту (B).

Реальный сценарий немного сложнее, чем этот, но просто любопытно, если создание контекста, подключенного к хранилищу Redux, много раз имеет какие-либо недостатки по сравнению с бурением реквизита.


person Ali Beyit    schedule 08.01.2021    source источник
comment
Даже не уверен, как одновременное смешивание Context и Redux может хоть как-то улучшить ваше приложение. Просто придерживайтесь одного из них. Я бы не сказал, что использование props имеет какие-либо значительные улучшения производительности по сравнению с redux, но подумайте немного о зависимостях, действительно ли имеет смысл зависеть от хранилища redux для хранения данных ваших компонентов?   -  person Luillyfe    schedule 09.01.2021
comment
Таким образом, в основном, используя контекст и Redux вместе, я отображаю состояние и отправляю только один раз в контексте, а затем я напрямую использую состояние и диспетчер легко в каждом компоненте, избавляя меня от хлопот с подключением моего компонента для их сопоставления. @Luillyfe   -  person Ali Beyit    schedule 09.01.2021
comment
Connect использует Context за кулисами.   -  person Luillyfe    schedule 09.01.2021
comment
Да, но, как я уже сказал, мне не нужно иметь дело с отображением для каждого из моих компонентов, если я сделаю это один раз в контексте и вместо этого использую ловушку контекста.   -  person Ali Beyit    schedule 09.01.2021
comment
Но каждый компонент (использующий этот контекст) будет иметь доступ ко всему состоянию в вашем хранилище redux. Тебе это нормально?   -  person Luillyfe    schedule 09.01.2021
comment
Нет, если я деструктурирую только те данные, которые хочу использовать. Например, если у меня есть X, Y, Z, доступные в моем контексте, и я хочу использовать только X в моем компоненте, я просто сделаю это как; пусть {X} = useMyContext (); Но да, у меня будет доступ ко всем данным, предоставленным контекстом в этом компоненте. Как вы думаете, это вызовет проблемы с производительностью?   -  person Ali Beyit    schedule 09.01.2021
comment
Чем это будет отличаться от сопоставления в функции подключения? потому что в этом случае вы должны делать это в каждом компоненте.   -  person Luillyfe    schedule 09.01.2021
comment
Для функции подключения я должен указать состояния и действия, которые я хочу подключить, которые загромождают компонент. Я имел в виду, что было бы проще выполнить все эти сопоставления в контексте и использовать контекст в одной строке для моих компонентов, что сделало бы его более читаемым, чем соединение. Теоретически разницы нет, просто гораздо чище читать и работать.   -  person Ali Beyit    schedule 09.01.2021


Ответы (1)


Я думаю, что это в основном вопрос предпочтений. Вот что я хотел бы учитывать при принятии этого решения:

  1. Сколько реквизита будет передано ребенку? Если их всего несколько, я использую 1 поставщик контекста для родительского элемента и использую бурение опор.
  2. Сколько реквизита будет разделено между родителем и ребенком? Может быть, у меня есть реквизит, который нужен только родителю, или наоборот. В этом случае я бы использовал поставщика контекста для каждого компонента и использовал бы только те реквизиты, которые мне нужны для каждого из них.

В целом я склоняюсь к бурению опор в случае, который вы описали, но, безусловно, есть причины, по которым вы можете рассмотреть возможность использования отдельных поставщиков контекста для своих компонентов.

person Charlie Stanard    schedule 08.01.2021
comment
Основная причина вопроса в том, что у меня есть вещи, связанные с пользовательским интерфейсом, такие как загрузка, ошибки и т. Д., Где они оба необходимы в родительском и дочернем, а в некоторых ситуациях дочернем по отношению к ребенку. Таким образом, это заканчивается передачей слишком большого количества пропсов каждому дочернему элементу, поэтому мне было любопытно, а не передавать слишком много реквизитов, есть ли какой-либо недостаток использования контекста в каждом из них по отдельности, например, замедлит ли процесс рендеринга компонента каким-либо образом или контекст настраивается только один раз, независимо от того, сколько раз вы его используете? Это главный вопрос. - person Ali Beyit; 09.01.2021