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

React组件渲染次数日志意外多次输出问题咨询

React组件渲染次数日志意外多次输出问题咨询

嘿各位,我最近写React组件的时候碰到了个闹心的小问题,想请大伙帮忙分析下。先把我写的代码贴出来:

import React, { useEffect, useRef, useState, memo } from 'react';  

const ExpensiveComponent = memo(({ onRender }) => {  
  useEffect(() => {  
    onRender();  
  }, [onRender]);  

  return <div>Expensive component</div>;  
});  

export default function App() {  
  const renderCountRef = useRef(0);  
  const [count, setCount] = useState(0);  

  const handleRender = () => {  
    renderCountRef.current += 1;  
    console.log('Component render count:', renderCountRef.current);  
  };  

  return (
    <div>
      <button onClick={() => setCount(prev => prev + 1)}>点击更新计数</button>
      <ExpensiveComponent onRender={handleRender} />
    </div>
  );
}

我原本预想的是,每次点击按钮触发count更新时,日志应该只输出一次渲染次数,但实际运行时却发现日志会意外多次打印——比如点一次按钮,可能会看到两次相同的日志输出,这完全和我预期的不一样。

我自己琢磨了半天,猜测会不会是handleRender函数每次App组件重新渲染时都会被重新创建,导致传给ExpensiveComponent的onRender prop引用变了,虽然用了memo但没起到阻止重复渲染的作用?另外会不会和React严格模式在开发环境下的重复执行机制有关?

有没有大佬能帮我理清楚这个问题的根因,再给个可行的解决办法呀?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 12:43:07