如果我有这个代码:

export const App = () => {
  return <Child />;
};

const Child = () => {
  console.log("RENDER");

  useEffect(() => {
    console.log("EFFECT");
  }, []);

  console.log("RETURN");

  return <div>Hello world</div>;
};

控制台中的输出为:

RENDER
RETURN
RENDER
RETURN
EFFECT
EFFECT
  • 为什么组件在触发useEffect之前会完全呈现两次?
  • 为什么效果会运行两次?

我预计输出结果为:

RENDER
RETURN
EFFECT

(即组件呈现,然后触发useEffect)

推荐答案

我认为您的main.tsx(或main.jsx)有<;React.StrictMode>;<;React.StrictMode>; Strict Mode

Reactjs相关问答推荐

迁移到React Router Dom v6后,我是否错误地使用了Link组件?

在Reaction中单击时,按钮未按预期工作

以下代码是否存在安全问题?

无法将react 路由状态从路由传递给子组件

react ';S使用状态不设置新状态

在继承值更改时重置react 挂钩窗体字段值

Reaction路由-如何在布局路由内呈现&q;/:id&q;路由

如何在React组件中自动更新图表数据?

设置自定义形状的纹理

画布:用鼠标绘制形状时重新绘制整个画布会导致卡顿

在React Router 6中,在路由渲染后更新路由数据

解决在React测试库中的act()警告

使用jest如何覆盖对象的模拟?我正在使用`jest.mock()`来模拟对象,并希望 for each 测试用例覆盖模拟.

如何使用样式化函数为 TextField 的输入组件设置样式

虽然通过了身份认证,但并没有导航到请求的页面

React js中不记名令牌中的空间问题

使用 Vite 的 React 中的路由无法正常工作(构建中)

使用 React.lazy 调试 webpack 代码拆分

当状态改变时如何执行一些动作,但只针对第一次更新?

仅在重新渲染后设置状态