Я пытаюсь выяснить, когда useEffect вызывает повторное рендеринг. Я очень удивлен результатом следующего примера:
https://codesandbox.io/embed/romantic-sun-j5i4m
function useCounter(arr = [1, 2, 3]) {
const [counter, setCount] = useState(0);
useEffect(() => {
for (const i of arr) {
setCount(i);
console.log(counter);
}
}, [arr]);
}
function App() {
useCounter();
console.log("render");
return <div className="App" />;
}
Результат этого примера следующий:
Моя путаница проистекает из двух вещей: я не знаю почему:
- Компонент рендерится только три раза (я бы предположил, что компонент рендерится при каждом вызове setCount + один начальный рендеринг - так 4 раза)
- Счетчик всегда имеет только два значения 0 и 3: я полагаю, что, как говорится в статье , каждый рендер видит свое собственное состояние и поддерживает, поэтому весь цикл будет выполняться с каждым состоянием в качестве константы ( 1, 2, 3) -> Но почему государство никогда не бывает 2?
Я был бы очень рад, если бы кто-то мог прояснить. Спасибо!