#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(....)
},[]);
}