React的动态表格与Redux-Form

时间:2018-03-21 09:25:51

标签: javascript reactjs

我正在开发足球投注系统。我想动态创建一个表单,并使用redux-forms将对象保持在状态。

我的基本实体是一个匹配:谁有一个home_team,一个away_team,并输入一个home_result和一个away_result。

 matches = [
{
  name: 1,
  type: "group",
  home_team: 1,
  away_team: 2,
  home_result: null,
  away_result: null,
  date: "2018-06-14T18:00:00+03:00",
  stadium: 1,
  channels: [],
  finished: false
},
{
  name: 2,
  type: "group",
  home_team: 3,
  away_team: 4,
  home_result: null,
  away_result: null,
  date: "2018-06-15T17:00:00+05:00",
  stadium: 12,
  channels: [],
  finished: false
},

我想用Redux-Form填充它,但是最好的方法就是陷入困境。我也想要,每次用户更改输入上的值时,都会反映在State-Json中。

1 个答案:

答案 0 :(得分:1)

要动态创建表单,您需要以不同方式构建数据。 你需要看起来像这样的字段对象(匹配id):

const fieldsObject = ['match1', 'match2', 'match3']

一个initialValues对象,如下所示:

const resultsObject = {
  match1_home: 1, 
  match1_away: 3
}

等等。然后,Form将根据initialValues和字段名称初始化其字段。代码:

const MyForm = (props) => {
 const { handleSubmit, fields } = props;
return (
    <form onSubmit={handleSubmit}>
      {fields.map(match => (
        <div key={match}>
          <Field
            name={`${match}_home`}
            component="input"
            />
           <Field
            name={`${match}_away`}
            component="input"
            />
        </div>
      ))}
      <button type="submit">Submit</button>
    </form>
  )
}

用法如下:

<MyForm initialValues={resultsObject} fields={fieldsObject} onSubmit={this.submitForm}/>