почему-то переменная query хранит стейт первого рендера
useEffect(() => {
history.listen(() => {
dispatch(action(parseQuery(query)));
});
}, []);
listen не при чём — это твой код берет query из замыкания
хм. а как сделать чтобы query всегда был актуальным?
в какой доке
Очевидно, по доке
По useeffect
задачу словами объясни, а то пока твой код похож на бред
ну мне нужно слушать изменение урла и на это изменение обновлять стейт
const location = useLocation() useEffect(() => { updateState(location) }, [location])
странно но в этом случае берется предпоследний стейт
или у тебя в коде ошибка, или ты не прав
useEffect(() => { return history.listen(() => { for (const [key, value] of query) { console.log(key, value); } dispatch(getOverview(parseQuery(query))); }); }, [location]); предполагаю из-за того что я сделал return. но чет хз
а зачем тут return нужен?
твой код опять похож на бред
листенер вешается при каждом ререндере
но он не очищается
ну да. и с каждым ререндером экшен вызывает на 1 раз больше
https://overreacted.io/a-complete-guide-to-useeffect/#each-render-has-its-own-props-and-state
да я в принципе уже понял почему так происходит.
Обсуждают сегодня