На это есть два ответа.
Во-первых, насколько мне известно, правило React "правила хуков" ESLint знает, как обрабатывать встроенные хуки специально. Например, он знает, что useState()
всегда возвращает один и тот же экземпляр функции установщика, поэтому вам не нужно включать его в массив зависимостей useEffect()
(то же самое для функции dispatch
из вызова useReducer()
).
Однако правило lint не знает о пользовательских хуках, будь то из библиотеки или из вашей собственной. Итак, поскольку useDispatch()
является пользовательским хуком, правило lint должно исходить из того, что эта dispatch
вещь может измениться, и пытается сказать вам, что вам нужно перечислить ее как зависимость.
Второй ответ заключается в том, что можно передать ссылку на новый магазин в <Provider>
, и в этом случае из ловушки useDispatch()
возвращается другой store.dispatch
.
Таким образом, на самом деле код будет работать нормально без включения dispatch
в массив deps, потому что ваше приложение почти наверняка использует один и тот же экземпляр магазина все время. Но поскольку правило lint этого не знает, вам, вероятно, все равно придется включить его в список, чтобы оно было тихим.
(Источник: я сопровождающий Redux и помогал нам в реализации нашего API хуков :))