当前位置: 首页 > 面试题库 >

带有自创建输入的Redux表单

魏彦
2023-03-14
问题内容

我正在尝试创建一个redux表单(使用redux-form),该表单可以动态创建自己的输入。我在弄清楚如何使redux-
form知道已创建的新字段时遇到麻烦。是否可以动态更改redux-form在表单组件本身中传递的字段属性?我在想这个错误吗?这是我正在使用的。

class AddCustomer extends Component {

 render() {

  class Form extends Component {

    constructor(props, context) {
      super(props, context)
      this.state = {
        inputsToAdd: []
      };
    }

    handleAddInput() {
       let inputsToAdd = this.state.inputsToAdd.slice();
       inputsToAdd.push(this.state.inputsToAdd.length);
       this.setState({ inputsToAdd });
    }

    submitForm(data) {
       console.log(data)
       this.setState({inputsToAdd: []});
       this.props.dispatch(initialize('addCustomer', {}))
    }

    render() {
      const { fields, handleSubmit } = this.props;
      return (
          <div>
            <form onSubmit={handleSubmit(this.submitForm.bind(this))}>
              <Input type='text' label='Company name' {...fields['companyName']}/>
              <Input type='email' label='Admin user email' {...fields['adminEmail']}/>
            </form>
            {this.state.inputsToAdd.map((element, index) => {
              return (
                <Input key={index} type='text' />
              )
            })}
            <Button onClick={() => this.handleAddInput()}>Add Input</Button>
            <Button onClick={handleSubmit(this.submitForm.bind(this))}>Submit</Button>
          </div>
        )
      }
    }

    Form = connectReduxForm({
      form: 'addCustomer',
      fields: ['companyName', 'adminEmail']
    })(Form);

    return (
      <div>
        <h1>Add Customer</h1>
        <Form />
      </div>
    )
  }
}

问题答案:

从Redux Form 6. *开始,您可以使用来实现您想做的事情 <FieldArray/>

参见下面的示例(摘自Redux文档,略有简化)

import React from 'react'
import { Field, FieldArray, reduxForm } from 'redux-form'
import validate from './validate'

const renderMembers = ({ fields, meta: { touched, error } }) => (
  <ul>
    <li>
      <button type="button" onClick={() => fields.push({})}>Add Member</button>
      {touched && error && <span>{error}</span>}
    </li>
    {fields.map((member, index) =>
      <li key={index}>
        <button
          type="button"
          title="Remove Member"
          onClick={() => fields.remove(index)}/>
        <h4>Member #{index + 1}</h4>
        <Field
          name={`${member}.firstName`}
          type="text"
          component={renderField}
          label="First Name"/>
        <Field
          name={`${member}.lastName`}
          type="text"
          component={renderField}
          label="Last Name"/>

      </li>
    )}
  </ul>
)


const FieldArraysForm = (props) => {
const { handleSubmit, submitting } = props
  return (
    <form onSubmit={handleSubmit}>
      <FieldArray name="members" component={renderMembers}/>
      <div>
        <button type="submit" disabled={submitting}>Submit</button>
      </div>
    </form>
  )
}

export default reduxForm({
  form: 'fieldArrays',     // a unique identifier for this form
  validate
})(FieldArraysForm)

有关更多信息,请查看文档 http://redux-form.com/6.1.1/examples/fieldArrays/



 类似资料:
  • 问题内容: 假设我要制作文件: 由于不存在,因此给出。 自动生成这些目录的最Python方式是什么?对我来说,是否有必要显式地调用并且在每个单独的位置上调用(即/ foo,然后是/ foo / bar)? 问题答案: 该功能执行此操作。请尝试以下操作: 添加该块的原因是为了处理在和调用之间创建目录时的情况,以便保护我们免受竞争条件的影响。 在Python 3.2+中,有一种更优雅的方法可以避免上述

  • 问题内容: 我一直在尝试使React和Redux成为秒表。我一直在寻找如何在Redux中设计这样的东西的麻烦。 我想到的第一件事是要执行一个设置初始值的操作。在那之后,我使用一遍又一遍地触发一个操作,该操作使用偏移量来计算经过了多少时间,将其添加到当前时间,然后更新。 这种方法似乎有效,但是我不确定如何清除间隔来停止它。另外,似乎这种设计很差,并且可能有更好的方法来做。 这是一个完整的JSFidd

  • 问题内容: 我希望有一个输入字段,用户可以输入自定义文本值或从下拉菜单中选择。普通只提供下拉选项。 我如何才能接受自定义值?例如:福特? 问题答案: HTML5具有内置的组合框。您创建一个文本和一个。然后,您向中添加一个属性,其值为的。 更新: 自2019年3月起,所有主要浏览器(现在包括Safari12.1和iOSSafari12.3)都支持此功能所需的级别。有关详细的浏览器支持。 看起来像这样

  • 第一个帖子!和一个java的noob*随便! 我知道有很多关于这个话题的帖子,我已经读过了…我就是解决不了。 我有一个非常简单的HTML表单,有静态输入和动态创建的输入。 HTML自动完成 HTML表单 null AddInput.js 所以问题很简单…给定这些代码,我如何在每个新生成的输入中实现自动完成。 事先多谢。

  • 问题内容: 是否存在列注释语法,该语法允许我直接在创建表语句(即,内联)中声明列的位置指定列注释?该11克规范没有提到任何东西,在另一页中提到的东西,但我无法得到它的工作。创建表后有一种指定注释的方法,但是我认为将注释与字段定义分开很烦人。我正在寻找这样的东西(不起作用): 问题答案: 恐怕“烦人”的语法是这样做的唯一方法。SQL Server,PostgreSQL和DB2使用相同的语法(尽管据我

  • 问题内容: 我有一个很大的文件(大约有200k输入)。输入形式为: 我正在读取此文件并将其存储在列表中,如下所示: 每当看到新行时,都会拆分文件。因此,文本如下所示: 我现在必须将这些值存储在字典中,其中键值是每个列表的第一个元素。即键将是A,B,C,D。我发现很难输入值作为列表的其余元素。即字典应该看起来像: 我已经完成以下工作: 请帮助我如何将值添加到字典中。如果列表中没有任何元素(除了将作为