【问题标题】:Nested Antdesign Forms with getFieldDecorator in React在 React 中使用 getFieldDecorator 嵌套 Antdesign 表单
【发布时间】:2019-02-07 19:14:35
【问题描述】:

我有一个 Antdesign 表单,它有一个子组件,它使用两个 Input 组件、两个日期选择器和一个按钮显示对象数组的列表。

当使用嵌套的 AntD 组件渲染使用函数式组件时,甚至可以有一个 getFielDecorator 吗?如果是这样,我如何将 getFieldDecorator 传递给 AntD 嵌套的 FormItem?

请参考我在这里附上的图片,它显示了 TradeListItems 呈现 TradeItem 列表的父组件“OverallInfo”及其子组件 TradeListItems。

非常感谢。

【问题讨论】:

标签: javascript reactjs antd


【解决方案1】:

Form.create()(MyComponent) 将向 MyComponent 注入 form 属性。

这是getFieldDecorator 工作所需的唯一条件。

这样的事情应该可以工作。

class Parent extends React.Component{

  render() {
   <ChildComponent form={this.props.form} />
  }
}

export default Form.create()(Parent);

ChildComponent.jsx

export default class ChildComponent extends React.Component{

  render() {
    const {getFieldDecorator} = this.props.form;
    return (
      // do FormItem
    )
  }
}

不管有多少孩子,但你不应该在另一个 &lt;Form/&gt; 中包含 &lt;Form/&gt;

更新:

我根据 antd doc 中的登录表单示例创建了一个示例。

https://codesandbox.io/s/kmyl0wq4m3

您会看到我将密码字段设置为一个功能组件,就像您的 TradeItem 组件一样。然后我有另一个像你一样的ListTradeItem组件,我只是复制了几个密码字段,你可以认为这是一个登录表单,你需要输入3个密码才能登录。

您将看到所有 3 个密码字段都可以正常工作且独立,getFieldDecorator 也可以正常工作(在您输入 3 个密码之前,登录按钮不会启用。

希望对您有所帮助。

【讨论】:

  • 感谢您的意见。我可能没有很好地解释它。我将附上我的组件的图片。我的两个子组件是无状态功能组件,在antD网站上说:“特别注意#getFieldDecorator不能用于装饰无状态组件。如果你使用react@github.com/facebook/react/pull/6534"
  • 我试图通过使问题更简洁并添加插图来改进我的问题,希望我能找到解决方案。任何方法都受到高度赞赏
  • 您好,我创建了一个示例,希望它可以帮助您理解我的意思。
  • 你好 Yichaoz,非常感谢你的例子帮助我解决了这个问题。将表单作为道具传递是我觉得非常有帮助的。再次感谢
猜你喜欢
  • 1970-01-01
  • 2020-02-07
  • 2015-03-13
  • 1970-01-01
  • 2021-02-08
  • 2021-10-25
  • 2021-12-08
  • 2013-12-11
  • 2019-10-08
相关资源
最近更新 更多