Я могу поместить некоторые состояния в качестве состояний компонентов, и я подумал, что для этого предназначен useState()
.
Однако книга Learning React, O'Reilly, 1st Ed, 2nd Release, p. 185, сказал:
С Redux мы полностью отделяем управление состоянием от React.
Кроме того, на официальном веб-сайте Redux пример Real World также даже делают isFetching
состояние Redux вместо состояния компонента. (Репозиторий GitHub).
Я также обнаружил, что в каком-то проекте в какой-то компании коллеги, кажется, одобряют все как состояние Redux, даже если это может быть состояние компонента.
Например, в той же книге на с. 185, было сказано, что мы даже сохраняем, какие сообщения расширены, а какие нет, в хранилище Redux. Но то, какое сообщение расширено, кажется полностью локальным для этого компонента и вообще не имеет ничего общего с другими компонентами. В случае с isFetching
, по крайней мере, я могу понять, что, если все приложение хочет объединить isFetching
любого компонента в глобальный индикатор счетчика.
На этой веб-странице также говорится:
Решение в идиоматическом React — т. е. в коде, написанном так, как его написал бы опытный разработчик React, — состоит в том, чтобы иметь так называемый единый источник правды, который является одним главным состоянием для большинства, если не для всего вашего приложения, а затем отправить это укажите в качестве реквизита для ваших дочерних компонентов.
будьте прагматичным программистом: используйте компоненты без сохранения состояния, где это возможно
Я не совсем понимаю. Как это работает? Когда состояние может быть состоянием компонента, было бы нормально поместить его в состояние компонента? Или в React/Redux правило — переводить все в состояние Redux? (в таком случае для чего тогда useState()
?)
Обновление: мне нравится ответ @RemcoGerlich, и я поставил две ссылки в качестве комментария под его ответом. Это официальные документы, в которых говорится, что не помещайте все состояния в Redux.
props drill down
иstate lifting
не требовались, и поместить локальное состояние в сами компоненты. - person Mayank Pandeyz   schedule 17.05.2021