我有一个计数器和 useEffect 中的 console.log() 来记录我的状态中的每个更改,但是 useEffect 在挂载时被调用两次。我正在使用 React 18。这是我的项目的 CodeSandbox 和下面的代码:
import { useState, useEffect } from "react";
const Counter = () => {
const [count, setCount] = useState(5);
useEffect(() => {
console.log("rendered", count);
}, [count]);
return (
Counter
{count}
);
};
export default Counter; Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
更新:回顾一下这篇文章,稍微明智一点,请不要这样做。
使用
ref或创建一个没有的自定义hook。export const useClassicEffect = createClassicEffectHook(); function createClassicEffectHook() { if (import.meta.env.PROD) return React.useEffect; return (effect: React.EffectCallback, deps?: React.DependencyList) => { React.useEffect(() => { let isMounted = true; let unmount: void | (() => void); queueMicrotask(() => { if (isMounted) unmount = effect(); }); return () => { isMounted = false; unmount?.(); }; }, deps); }; }