【问题标题】:Redux Form Fields Component and ValidationRedux 表单字段组件和验证
【发布时间】:2017-04-04 21:47:39
【问题描述】:

我正在使用 redux 根据值隐藏和显示组件。

Redux 表单文档提到以下内容:

应谨慎使用连接到多个字段,因为每次它连接到的任何字段发生更改时,都需要重新渲染整个组件。这可能是性能瓶颈。除非您绝对需要,否则您应该使用 单独连接到您的字段。

我不清楚我的基于单选按钮隐藏和显示字段的解决方案是否足以使用 Fields 发出警告以谨慎使用。

您能否澄清一下我的组件是否有足够的理由使用Fields。如果没有,有什么替代方法来实现?

另外,fields 如何实现验证?

<div>
    <form>
      <Fields
       component={RadioButtonGroupField}
       names={['radioButtonGroup', 'nameTextField', 'nickNameTextField']}
      />
    </ form>
</div>

function RadioButtonGroupField(fields) {
    return(
      <div>
        <RadioButtonGroupComponent
          {...fields.radioButtonGroup.input}
          {...fields.radioButtonGroup.meta}
        />
        {
          (fields.radioButtonGroup.input.value === 'name' ||
          fields.radioButtonGroup.input.value === 'both') &&
          <NameTextFieldComponent
            {...fields.radioButtonGroup.input}
            {...fields.radioButtonGroup.meta}
          />
        }
        {
          (fields.radioButtonGroup.input.value === 'nickname' ||
          fields.radioButtonGroup.input.value === 'both') &&
           <NicknameTextFieldComponent
            {...fields.radioButtonGroup.input}
            {...fields.radioButtonGroup.meta}
          />
        }
      </div>
     );
  }

【问题讨论】:

    标签: redux redux-form react-redux-form


    【解决方案1】:

    还有另一种方法可以做到这一点,使用 redux-form 选择器 (http://redux-form.com/6.0.5/docs/api/Selectors.md/) 从您的 mapStateToProps 中的 redux 存储中选择特定值,然后有条件地渲染某些组件。

    但是,我认为Fields 正是您在这种情况下应该使用的。我认为警告主要是警告人们不要将整个表单放入 Fields,重新渲染这 3 个字段没什么大不了的。

    首先导致创建Fields 的思考过程可能是处理此问题的最佳方法:https://github.com/erikras/redux-form/issues/841

    【讨论】:

    • 如何使用 Fields 实现验证?
    • 这是一个好问题@eNddy!我不确定验证Fields 到底意味着什么。没有 validate 论点,我相信你已经注意到了。显而易见的方法是使用syncValidation:redux-form.com/6.6.1/examples/syncValidation
    • 我想如果有可能有类似的东西:&lt;Fields component={RadioButtonGroupField} names={['radioButtonGroup', 'nameTextField', 'nickNameTextField']} validations={[radioButtonGroupValidation, nameTextFieldValidation, nickNameTextField]} /&gt; 。 @dpwrussell 你认为这样的事情可能吗?我似乎很高兴不必污染全局异步验证?
    • 我不是在尝试验证 Fields 作为一个整体,而是尝试在不使用全局同步的情况下为每个单独的组件添加验证。
    • 同意,我的回答只是当前状态。您可能想做 3 件事,对吗? 1)独立验证 3 个字段(即 3 个验证器),2)一起验证 3 个字段。他们是一个相互作用的群体这一事实使您很可能需要一起验证它们。 3) (1) 和 (2) 两者。因此,在您的示例中,这可能是 1、3 或 4 个验证器,具体取决于您想要做什么。我的建议是在 GitHub 上的一个问题中列出这个用例,因为我认为这是对表单的合理改进。字段是相当新的,因此缺少功能也就不足为奇了。
    猜你喜欢
    • 2017-12-09
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    相关资源
    最近更新 更多