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

React中如何为多个子组件传递多个未显式声明的未知props?

React多层组件灵活透传属性解决方案

方案1:修正现有透传写法(适用层级较少的场景)

你现有思路是可行的,仅需要修正顶层组件传递对象时的语法错误即可实现需求:中间层不需要感知具体传递的属性,仅需透传分组后的属性对象,底层组件灵活接收所有传入属性。
修正后的完整代码如下:

顶层组件代码

export const Top = () => {
    return(
        <Middle
            // 将传给BottomA的所有属性包装为对象
            botA={{propA: true, propB: false}}
            // 将传给BottomB的所有属性包装为对象
            botB={{propA: 1, propB: 2}}
        />
    );
}

中间层组件代码(无需改动)

中间层仅需要接收分组对象,直接透传即可,不需要关心对象内的具体字段:

export const Middle = ({botA, botB}) => {
    return(
        <>
            <BottomA {...botA} />
            <BottomB {...botB} />
        </>
    );
}

底层组件代码(无需改动)

底层组件可直接接收所有传入的未知属性灵活处理:

export const BottomA = ({...unknownProps}) => {
    // 自定义处理unknownProps
    return(
        ...
    );
}

export const BottomB = ({...unknownProps}) => {
    // 自定义处理unknownProps
    return(
        ...
    );
}

方案2:使用React Context(适用层级较深的场景)

如果组件嵌套层级超过3层,中间还有多层无关组件,可使用Context避免逐层透传的冗余代码(即解决Props Drilling问题):

1. 先创建公共Context

import { createContext, useContext } from 'react';

const BottomPropsContext = createContext();

2. 顶层组件提供Context值

export const Top = () => {
    const propsConfig = {
        botA: {propA: true, propB: false},
        botB: {propA: 1, propB: 2}
    }
    return(
        <BottomPropsContext.Provider value={propsConfig}>
            <Middle />
        </BottomPropsContext.Provider>
    );
}

3. 中间层完全不需要处理相关属性

export const Middle = () => {
    // 中间层无需接收、透传任何相关属性
    return(
        <>
            <BottomA />
            <BottomB />
        </>
    );
}

4. 底层组件直接从Context取值

export const BottomA = () => {
    const { botA: unknownProps } = useContext(BottomPropsContext);
    // 自定义处理unknownProps
    return(...);
}

export const BottomB = () => {
    const { botB: unknownProps } = useContext(BottomPropsContext);
    // 自定义处理unknownProps
    return(...);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:18:00