Я пытаюсь обновить и указать hasError
поле состояния внутри функции инициализации моего компонента, чтобы контролировать, происходит ли перенаправление после успешной инициализации или отображается ошибка.
Вот сокращенная версия проблемы:
const [hasError, setHasError] = useState(false);
useEffect(() => {
initialize();
}, []);
async function initialize(){
try {
await networkRequest();
} catch (err) {
setHasError(true);
}
console.log(hasError); // <- is still false
if(!hasError){
redirect() // <- causes redirect even with error
}
}
function networkRequest() {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject();
}, 1000);
});
}
Функция инициализации должна вызываться только один раз при монтировании компонента, поэтому я передаю []
в useEffect
. Передача [hasError]
в useEffect
также не имеет смысла, так как я не хочу, чтобы инициализация выполнялась каждый раз hasError
обновления.
Я видел, как люди рекомендуют использовать useReducer
, но это кажется хакерским, поскольку я Я уже использую Redux для этого компонента, и тогда мне нужно будет использовать 2 разных dispatch
экземпляра.
Как обычно обрабатывается такой вариант использования?