Ошибка проблемы исправления: Слишком много повторных отрисовок. React ограничивает количество рендеров, чтобы предотвратить бесконечный цикл

#javascript #reactjs #redux #react-redux

Вопрос:

если я напишу это, то получу ошибку: Слишком много повторных рендеров. React ограничивает количество рендеров, чтобы предотвратить бесконечный цикл.

 var dispatch = useDispatch()
var phone = useSelector(store => store.phone)
 dispatch(phonePagePhone(window.location.href.split('/').splice(-1)))
 

но если я напишу это без ошибок:

  var phone = useSelector(store => store.phone)
 

почему, если я использую useSelector и useDispatch в одном файле, возникает ошибка: Действия должны быть обычными объектами. Используйте пользовательское промежуточное программное обеспечение для асинхронных действий. возвращение

Ответ №1:

Вы должны отправлять сообщения в обратном вызове, а не в теле вашего компонента.

Подобный этому:

 const MyComponent = () => {
   const dispatch = useDispatch(); 
   const phone = useSelector(...);

   const handleSomeUserInitiatedAction = () => {
      dispatch(...);
   };
}
 

Если вы хотите отправить при первом рендеринге, вы можете сделать это с помощью эффекта использования, подобного этому:

 
const MyComponent = () => {
   const dispatch = useDispatch(); 
   const phone = useSelector(...);

   useEffect(() => {
      dispatch(....)
   },[]);
}