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

React函数内声明的子组件不更新问题及解决方案咨询

解决动态步骤组件props不更新的问题

你的核心问题在于把生成的组件数组存在了useState里——组件初始化时buildStepsFlow()只执行一次,捕获了当时的targetGroup值,后续父组件状态更新时,steps这个state不会自动重新生成,导致子组件拿到的始终是旧props。

最简便的解决方式是用useMemo替代useState来管理步骤数组:

import React from "react"

const TargetGroupStep = ({ targetGroup, setTargetGroup }) => (
    <div>
      <div>props = {targetGroup}</div>
      <button onClick={() => setTargetGroup("group1")}>Button 1</button>
      <button onClick={() => setTargetGroup("group2")}>Button 2</button>
    </div>
);

export default function App() {
  const [targetGroup, setTargetGroup] = React.useState("");

  const buildStepsFlow = () => [
    <TargetGroupStep targetGroup={targetGroup} setTargetGroup={setTargetGroup}/>,
  ];
  // 用useMemo替代useState,依赖targetGroup,状态变化时重新生成数组
  const steps = React.useMemo(() => buildStepsFlow(), [targetGroup]);

  return (
    <div className="App">
      <div>Parent state: {targetGroup}</div>
      {steps[0]}
      <br/>
      If declared:
      <TargetGroupStep targetGroup={targetGroup} setTargetGroup={setTargetGroup}/>
    </div>
  );
}

这样做的好处:

  • 保留了对steps数组的访问权限,能随时获取步骤数量(比如steps.length)
  • 不需要引入Context,避免额外复杂度,不影响后续单元测试
  • 只有当targetGroup变化时才会重新生成步骤数组,避免不必要的渲染

如果buildStepsFlow的生成逻辑依赖其他状态或参数,只需要把这些依赖项添加到useMemo的依赖数组里即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:50:53