如何有效处理React中useEffect运行两次的问题?
P粉759457420
P粉759457420 2023-10-20 00:00:23
[React讨论组]

我有一个计数器和 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;

P粉759457420
P粉759457420

全部回复(1)
P粉156532706

更新:回顾一下这篇文章,稍微明智一点,请不要这样做。

使用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);
  };
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号