javascript - React - 包装父组件和直接子组件

标签 javascript reactjs antd

项目设置

我有一个用 create-react-app 创建的项目并且有antd (Ant Design) 安装和配置。

问题

考虑 <Steps>组件及其 <Steps.Step>来自 Ant Design 的子组件。

从官方文档来看,我们是这样渲染一个多步组件的:

<Steps>
    <Steps.Step />
    <Steps.Step />
    <Steps.Step />
</Steps>

注意:我发现包装 <Steps.Step>组件成单个<div>不管用。这些步骤不会显示在网页上。

<Steps>
    <div class="not-working">
        <Steps.Step />
        <Steps.Step />
        <Steps.Step />
    </div>
</Steps>

所以结构必须是<Steps.Step>作为 <Steps> 的直接子项的组件.

现在我想将这些组件中的每一个都包装成一个自定义的 React 组件,如下所示。

MySteps.js:

import "Steps" from "antd";

export default class MySteps extends Component {
    render() {
        return <Steps>{this.props.children}</Steps>
    }
}

MyStep.js:

import "Steps" from "antd";

export default class MyStep extends Component {
    render() {
        return <Steps.Step></Steps.Step>
    }
}

然后将上面的代码改写如下:

<MySteps>
    <MyStep />
    <MyStep />
    <MyStep />
</MySteps>

但是,结果是,React 生成了类似于以下内容的内容:

...
    <Steps>
        <MyStep>
            <Step></Step>
        </MyStep>
    </Steps>
...

问题

我该怎么做才能消除包装器,同时又能够重用和包装其他人编写的组件而不影响结果结构?

最佳答案

问题不在于您包装在组件中,而在于您没有将 Prop 传递给 Steps.Step。如果您将所有 Prop 传递给 Steps.Step inside MyStep 它将起作用。

import "Steps" from "antd";

export default class MyStep extends Component {
    render() {
        return <Steps.Step {...this.props} ></Steps.Step>
    }
}

这是工作代码和框:https://codesandbox.io/s/antd-reproduction-template-3ytn7

关于javascript - React - 包装父组件和直接子组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57105698/

相关文章:

c# - ajax参数总是为空?

reactjs - 如何在React Native应用程序中订阅Supabase的实时数据?

reactjs - Jest/Enzyme 测试中的 setTimeout

Javascript/Jquery - 获取多个 block 的宽度

javascript - 为什么方法 `shouldNotResolve` 没有捕获被拒绝的 Promise?

javascript - 多个 AJAX 请求仅第一个有效,其他失败

reactjs - 在类组件中 react useForm 等价物

javascript - 在antd 4中将初始值设置为动态形式

javascript - 如何更改antd中动态表单字段的值?

css - 如何在 Antd 中自定义表格行高?