gpt4 book ai didi

javascript - 防止 useEffect Hook 在 ComponentDidMount() 上运行

转载 作者:行者123 更新时间:2023-12-05 02:07:16 24 4
gpt4 key购买 nike

此代码在 name 更改时运行(应该如此),但它也会在组件首次加载时运行。我怎样才能让它仅在 name 的后续更改时运行,而不是在第一次设置默认值时运行?

const [name, setName] = useState('');

useEffect(() => {
alert('Hi ' + name);
}, [name]);

最佳答案

使用 ref 您可以跟踪第一次渲染,在第一次渲染后设置为 false。

const firstRenderRef = useRef(true);
const [name, setName] = useState('');

useEffect(() => {
if (firstRenderRef.current) {
firstRenderRef.current = false;
} else {
alert('Hi ' + name);
}
}, [name]);

不过我会将其纳入自定义 Hook

const useSkipFirstEffect = (callback, dependencies) => {
const firstRenderRef = useRef(true);

useEffect(() => {
if (firstRenderRef.current) {
firstRenderRef.current = false;
} else {
callback();
}
}, [callback, ...dependencies]);
};

用法:

useSkipFirstEffect(() => {
alert('SkipFirstEffect: Hi ' + name);
}, [name]);

Edit useEffect skip first render

关于javascript - 防止 useEffect Hook 在 ComponentDidMount() 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61926893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com