Использование connect и mapDispatchToProps с функциональными компонентами

#reactjs #redux #react-redux

#reactjs #сокращение #реагировать-redux

Вопрос:

Я экспериментирую с Redux. Я понимаю, что для отправки действия в хранилище из функциональных компонентов можно подписаться с помощью useDispatch hook. Я отправляю действие из useEffect и согласно документу react-redux., dispatch может быть исключен из списка зависимостей для useEffect , поскольку его идентификатор стабилен.

   const TriviaCategories = () => {
  const dispatch = useDispatch();
  useEffect(() => {
    dispatch({ type: "SET_CATEGORIES", triviaCategories });
  }, []);
  return null;
};
  

Если я решу использовать connect для подписки на хранилище, будет ли dispatch идентификатор функции по-прежнему стабильным, как с useDispatch hook?

Комментарии:

1. При использовании connect специальной отправки и сопоставления с вашими создателями действий создатели действий заключены в вызов dispatch, поэтому на самом деле нет необходимости напрямую обращаться к dispatch prop.

Ответ №1:

dispatch Функция всегда будет стабильной, пока вы продолжаете передавать один и тот же экземпляр Redux store в свой <Provider store={store}> , потому что dispatch это просто store.dispatch .

Однако правило lint React «привязки зависимостей» не знает этого. Он знает, что функции из встроенных перехватчиков React ( useState установщики и useReducer функции отправки) всегда стабильны, поэтому он может использовать особый случай и игнорировать их, но у него нет способа узнать, что dispatch функция React-Redux должна быть стабильной. Таким образом, он всегда будет предупреждать, что вам нужно добавить его в массив effect deps.

Из-за этого вы могли бы также просто всегда добавлять его в массив deps.