Когда использовать локальный state, а когда redux?



@user_of_toster

1) Является ли плохой практикой хранить состояние, которое используется только в одном компоненте (локальное) в redux, а не в самом компоненте?
2) Является ли плохой практикой смешивать локальное и redux-состояние?


Решения вопроса 1



@n1ksON

1. Нет
2. Нет

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

пример – thunksaga может менять стейт, который используется только в одном компоненте вне компонента. Сделать это можно диспатчем экшена. При использовании локального стейта это не осуществить, т.к сага не может получить setState из компонента.

Логично что без redux это не осуществить. Ведь библиотеки называются: redux-thunk и redux-saga. Однако вам никто не мешает делать API-запросы прямо в компоненте, но так делать не нужно. Это считается плохой практикой

Комментировать

Ответы на вопрос 3



@DmitryITWorksMakarov

1. тут ключевым моментом является, не количество компонентов, в которых используется какое либо состояние, а другие моменты. Если мы все состояния всех компонентов будем хранить в редаксе, то при чтении кода, при отладке будет много визуального шума, будет сложно разобраться что происходит.
В редаксе мы данные приложения, например. В локальном состоянии – идентификаторы выбранных элементов в таблице.
Можно очень условно границу провести: то что бы вы хранили в базе, то храним в редаксе, а данные которые храним в приватных переменных класса – в локальном состоянии. Мне такая аналогия ближе – я начинал с десктопных приложений.
Но это всё очень грубо. В конкретной ситуации может быть как угодно.
Можно придумать и обосновать ситуацию, когда хранение всего состояния всех компонентов в редаксе будет оправдано.

2. Учитывая ответ на 1, придётся смешивать.

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



@Sanasol

Что за сложности непонятно.
Когда это состояние надо использовать в других местах приложения кроме этого компонента, особенно если это не родительские/дочерние компоненты, то это надо засунуть в “глобальный” стейт.
Во всех остальных случаях это касается только одного компонента, зачем это шарить на всё приложение.

Ну а насчет смешивать совсем бред, если у вас есть глобальные данные которые надо использовать где-то, то как их использовать в компоненте, но при этом не использовать какие-то локальные переменные которые нужны. Где логика?



@profesor08

Если данные нужны в разных компонентах, которые находятся в разных dom деревьях, то понадобится некое хранилище для общих данных. Тут может пригодиться redux или аналог, а можно и через контекст пробросить от корневого компонента.
Если данные нужны только основному компоненту и его потомкам, то достаточно пробросить через контекст, или через пропсы.
А если данные нужны только в рамках компонента и потомкам не пробрасываются, то локальный стейт.

Это больше вопрос удобства, засрешь контекст или пропсы – будет неудобно, засрешь стор – будет неудобно.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *