#javascript #reactjs #react-hooks
Вопрос:
Приведенный ниже код консоли 1,2,4,5,3,6. Как позволить ему утешить 1,2,3,4,5,6? демо: https://codesandbox.io/s/useeffect-4bul5
const Foo = () => {
const sleep = (timer) => {
return new Promise((res) => {
setTimeout(res, timer)
})
}
React.useEffect(() => {
console.log(1)
const foo = async () => {
console.log(2)
await sleep(1000);
console.log(3)
}
foo();
}, []);
React.useEffect(() => {
console.log(4)
const foo = async () => {
console.log(5)
await sleep(1000);
console.log(6)
}
foo();
}, []);
return <div>111</div>
}
Комментарии:
1. Насколько я знаю, вы не можете повлиять на порядок, в котором
useEffect
вызывается. В вашем случае я рекомендую одинuseEffect
звонок.2. Я бы также рекомендовал один эффект использования, который вы можете передать в результат использования
useCallback((async () => ...)(), [...])
, таким образом, вы можете использоватьawait/async
. Используйтеstate
переключатель для запуска эффекта.3. Да, вы правы, спасибо @Tracer69
Ответ №1:
Если вы создадите async
функцию Foo, вы можете использовать await для обещаний, чтобы выполнять их синхронно.