useEffect 会检测两次监测的对象 内存地址是否相同,相同就跳过,不同才会执行 useEffect
时间: 2024-08-16 11:00:27 浏览: 94
与 useEffect 几乎相同,但不延迟。
`useEffect` 是 React 中的一个 Hook,用于副作用操作(比如订阅事件、发送 API 请求、设置定时器等)。它确实会在每次组件渲染时运行,但是它有一个特性叫做依赖数组(dependency array),用来确定哪些状态变化会触发 `useEffect` 的重新运行。
如果 `useEffect` 的依赖数组中包含了某个变量,React 会比较这个变量在前后渲染周期中的内存地址。如果地址相同,说明该变量的值未改变,因此 React 视其为“浅比较”,认为不需要再次执行 `useEffect`。只有当依赖项的值发生改变,即内存地址不同时,`useEffect` 才会被重新调用。
这是 `useEffect` 部分文档中的描述:
> By default, `useEffect` only runs after the render is committed to the screen. If you provide an array of dependencies to the effect as the second argument, it will run after every update where any of those dependencies change[^4]。
举个例子:
```jsx
const [count, setCount] = useState(0);
useEffect(() => {
console.log('Component updated');
}, [count]); // 只有当 count 改变时,useEffect 会执行
setCount(1); // useEffect 会执行,因为 count 地址已变
setCount(count + 1); // useEffect 也会执行,因为 count 的值改变了
```
阅读全文