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

React中同级组件如何传递数据,有没有更简洁的实现方案?

方案1:ABCD为需要渲染的UI组件

无需声明4个独立状态,直接复用父组件传入的getReturn即可省去最后一层状态和副作用,简化后代码如下:

const TestComponent = ({originalData, getReturn}) => {
    const [dataFromA, setDataFromA] = useState();
    const [dataFromB, setDataFromB] = useState();
    const [dataFromC, setDataFromC] = useState();

    return (
        <>
            <A data={originalData} getReturn={setDataFromA}/>
            <B data={dataFromA} getReturn={setDataFromB}/>
            <C data={dataFromB} getReturn={setDataFromC}/>
            <D data={dataFromC} getReturn={getReturn}/>
        </>
    )
}

如果后续会新增处理步骤,可以进一步把处理链封装为配置项,无需重复写组件调用逻辑:

// 处理链配置,新增步骤仅需修改该数组
const PROCESSORS = [A, B, C, D]

const TestComponent = ({originalData, getReturn}) => {
  const [midData, setMidData] = useState(Array(PROCESSORS.length - 1).fill(undefined))

  return (
    <>
      {PROCESSORS.map((Comp, idx) => {
        const input = idx === 0 ? originalData : midData[idx - 1]
        const onReturn = idx === PROCESSORS.length - 1 
          ? getReturn 
          : (val) => setMidData(prev => prev.with(idx, val))
        return <Comp key={idx} data={input} getReturn={onReturn} />
      })}
    </>
  )
}

方案2:ABCD仅做数据处理无UI渲染

完全不需要封装为组件,直接把处理逻辑抽为纯函数,用管道调用即可,性能更高代码更简洁:

// 按顺序抽取四个组件的处理逻辑为纯函数
const processA = (data) => {/* 原A组件返回数据的处理逻辑 */}
const processB = (data) => {/* 原B组件返回数据的处理逻辑 */}
const processC = (data) => {/* 原C组件返回数据的处理逻辑 */}
const processD = (data) => {/* 原D组件返回数据的处理逻辑 */}

const TestComponent = ({originalData, getReturn}) => {
  useEffect(() => {
    const finalData = processD(processC(processB(processA(originalData))))
    getReturn(finalData)
  }, [originalData, getReturn])

  return null // 或其他需要渲染的UI
}

如果处理步骤多可以用reduce优化调用逻辑:

const PROCESS_FNS = [processA, processB, processC, processD]
const finalData = PROCESS_FNS.reduce((prev, fn) => fn(prev), originalData)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:06:00