В каких случаях диспетчеризация Redux может измениться? - PullRequest
1 голос
/ 27 июня 2019

В реакции-избыточности v7 у нас теперь есть хук useDispatch(), чтобы получить ссылку на отправку магазина. Смотрите здесь: https://react -redux.js.org / api / hooks # usedispatch

Получившаяся функция dispatch затем должна быть указана как зависимость для любых хуков useEffect, useMemo и т. Д. Почему это?

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

Есть ли случаи, когда функция dispatch могла бы измениться?

1 Ответ

3 голосов
/ 27 июня 2019

На это есть два ответа.

Во-первых, насколько мне известно, правило React "правила хуков" ESLint знает, как обрабатывать встроенные хуки специально. Например, он знает, что useState() всегда возвращает один и тот же экземпляр функции установщика, поэтому вам не нужно включать его в массив зависимостей useEffect() (то же самое для функции dispatch из вызова useReducer()).

Однако правило lint не знает о пользовательских хуках, будь то из библиотеки или из вашей собственной. Итак, поскольку useDispatch() является пользовательским хуком, правило lint должно исходить из того, что эта dispatch вещь может измениться, и пытается сказать вам, что вам нужно перечислить ее как зависимость.

Второй ответ заключается в том, что можно передать ссылку на новый магазин в <Provider>, и в этом случае из ловушки useDispatch() возвращается другой store.dispatch.

Таким образом, на самом деле код будет работать нормально без включения dispatch в массив deps, потому что ваше приложение почти наверняка использует один и тот же экземпляр магазина все время. Но поскольку правило lint этого не знает, вам, вероятно, все равно придется включить его в список, чтобы оно было тихим.

(Источник: я сопровождающий Redux и помогал нам в реализации нашего API хуков :))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...