我是新的React,这是一个非常简单的计数器,递增值为5,我了解到useEffect是在每个组件重新渲染/依赖变量更改后执行的。但我发现useEffect(即警报)是在h1中的值更改前出现的
import { useEffect, useState } from "react";
export default function App() {
const [number, setNumber] = useState(0);
let prev = 0;
useEffect(() => {
if (number !== 0) {
alert("Number changed to " + number);
}
}, [prev, number]);
console.log(prev);
return (
<>
<h1>{number}</h1>
<button
onClick={() => {
setNumber((n) => {
prev = n;
return n + 5;
});
}}>
+5
</button>
</>
);
}
预期结果:h1值递增5后发生警报
当前结果:警报先出现,警报关闭后h1值递增
2条答案
按热度按时间2izufjch1#
此时将运行useEffect:
因此,在您的情况下,它会在组件第一次呈现时、编号更改时以及prev更改时运行。另外,不要像现在这样更改prev,这将导致无限循环!
7xzttuei2#
useEffect的运行方式基本上与componentDidMount类似,
因此它在安装组件后第一次运行,然后在每次重新渲染后运行