You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

传递相同Props时如何避免React组件重复执行?

问题原因与解决办法

你用memo没达到预期,是因为memo管的是同一个组件实例的重渲染,不是多个独立实例的初始渲染。你在App里写了三个<Todo text="Learn React"/>,这是三个完全独立的组件实例,每个实例都会执行一次Todo组件的函数,这属于正常的初始渲染,memo管不着。

如果你的需求是让Todo组件的逻辑只执行一次,同时显示三个相同的内容,可以用useMemo缓存渲染好的Todo元素,然后重复使用:

修改App组件代码:

import { useMemo } from 'react';
import Todo from "./components/Todo";

function App() {
  // 缓存Todo元素,依赖为空数组只会创建一次
  const repeatedTodo = useMemo(() => <Todo text="Learn React"/>, []);
  
  return (
    <div>
      <h1>My Todos</h1>
      {repeatedTodo}
      {repeatedTodo}
      {repeatedTodo}
    </div>
  );
}

export default App;

如果你的需求只是要显示一个Todo组件,直接删掉另外两个<Todo/>就行,这是最简单的方式。

补充说明:memo的正确用法是——当父组件重渲染但子组件props没变化时,阻止子组件跟着重渲染。比如App里有state变化,三个Todo的props不变,这时候memo会让它们不重复执行渲染逻辑,但初始渲染的三个独立实例还是会各执行一次。

内容的提问来源于stack exchange,提问作者rajgopalbh4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 13:22:37