Есть дашборд, на главной странице есть графики и выбор среза дат для этих графиков.
Соответственно в Redux хранить эту дату - такое себе, потому что она работает и нужна только для главной страницы.
Подумал что проще пробросить дату черед контекст, можно ли так делать, адекватно ли это?
Думаю да, потому что в том же styled component используется Context - ThemeProvider, но почти все примеры что я видел, почти все данные суют в redux store, независимо нужны они только для 1 компонента (страницы) или используются глобально (как например данные о пользователе и тп)
Какие плюсы у подхода - хранить все в redux store ?
Какие плюсы у подхода - пробросить через Context (если требуется только для 1 места)?
Павел Антонов, его нужно пробросить в все дочерние, не на 1 уровень, для этого контекст подходит, но вот не знаю используют ли его в связке с redux для подобного рода задач
alex4answ, Ну я бы тогда в redux все хранил. Он для этого и предназначен, сегодня вам требуются данные в одном месте, а завтра они могут понадобиться где-то еще и они уже у вас в редаксе будут. Я на текущем месте работы столкнулся с таким явлением где прошлые разрабы прикрутили контекст зачем-то и гоняли данные по нему, при этом в проекте стоит редакс и большая часть данных в нем. Пришел я и мне потребовались данные из контекста в своих задачах, и пришлось в итоге мне те же данные положить в редакс.
Мне кажется тут единого правильного ответа нет, по сути как вам удобно так и делайте, я в такой ситуации целюсь "на потом". Ну и просто если уже есть редакс стор зачем еще контекст делать. Вот если б не было редакса, то да контекст хороший вариант.
Не претендую на верность вышесказанного, так мысли в слух.
Павел Антонов, понимаю, но тут я уверен что данные нужны будут только на этой странице и только к этим элементам, это просто срез дат для графиков, в редаксе они мне точно не нужны, тк там храню более глобальные данные, но хорошо, спасибо за комментарий и ваш опыт )
Если 1-2 уровня я бы заюзал useState на главном компоненте и прокинул пропсами, дочерние компоненты еще бы в memo обернул, чтобы не ререндера не было при изменении чего-нить другого.
Ели уже больше 2х уровней, то уж лучше положить в redux имхо, и доставать там селекторами использую useSelector. Так хотя бы данные в одном месте лежат.
Судя по подходу, который советует Дэн Абрамов с появлением хуков, уже нет как такового деления на тупые и умные компоненты, можно просто оба комопнента подконнектить к стору и обмениваться там данными.
Context использовать если это какой-то отдельный модуль со своими изолированными данными и этот отдельный модуль используется в каких то других модулях (приложениях, в случае мопонорепы например) и нет возможности его стор заюзать.
Илья Петрушенко , спасибо, не очень понял про монорепу, но резюмируя:
Если вложенность пару уровней - пробрасывать пропс
Если больше - класть в редакс, тк данные в едином месте
Контекст использовать там, где нет возможности подключить его к стору, либо он используется как сторонний модуль который изолирован от приложения (можете подсказать пример?)
Ну попробую описать), но это все больше относится к организации архитектуы приложения по пакетам с помощью lerna.
Например у вас есть приложения А и В, и общий модуль С. Вам нужно в общищй модуль С передать какие-то одинаковые данные (например user), которые в А и В вы получаете по разному. Так вот создаете контект в модуле С, импортиуруете в А и В и используете для установки нужных значений.
Ну вообще это больше как конкретное техническое решение, нежели паттерн какой-то)