[material-ui],[redux-from]选择动态选项

jie*_*ede 9 reactjs material-ui redux-form

我从后端请求数据.数据是礼物数据和人物数据.

我的目标是实现连接礼物和人.每个人都送礼物.

我使用material-uiredux-form包.

人员数据树如下:

persons: "
        [ {
            name:'person1_name',
            userID:'person1_userID',
            hobbies: persondata -> the same to persons  
           },
           {
            name:'person2_name',
            userID:'person2_userID',
            hobbies: persondata -> the same to persons  
           }, 
           {
            name:'person3_name',
            userID:'person3_userID',
            hobbies: persondata -> the same to persons  
           }
          ]
Run Code Online (Sandbox Code Playgroud)

我想得到这个结果:我点击select,3(如果后端人数据是3人)人item(选项)显示.

我使用redux状态state.sendGood.driftMemberArray.formData来保存人员数据.

我的代码如下:

import React from 'react'
import {Field, FieldArray, reduxForm } from 'redux-form'
import { connect }   from 'react-redux'
import SelectField from 'material-ui/SelectField'
import MenuItem from 'material-ui/MenuItem'

const renderSelectField = ({ input, label, meta: { touched, error }, children, ...custom }) => (
    <SelectField
        floatingLabelText={label}
        errorText={touched && error}
        {...input}
        onChange={(event, index, value) => input.onChange(value)}
        children={children}
        {...custom}/>
)

const renderMembers = ({ fields, meta: { touched, error, submitFailed } }) => (
    <ul>
      {fields.map((member, index) =>
          <li key={index}>
            <Field name={`${member}.selectMan`} component={renderSelectField} label="select a man">
              {member.hobbies.map( (item,keyIndex) =>
                 <MenuItem  key={keyIndex} value={keyIndex} primaryText='hahah'/>
              )}
            </Field>
          </li>
      )}
    </ul>
)


let NextWeekDriftForm = (props) => {
  const { handleSubmit, pristine, reset, submitting} = props;
  return (
      <form onSubmit={handleSubmit}>
        <div>
          <FieldArray name="members"component={renderMembers}/>
        </div>
      </form>
  )
}

NextWeekDriftForm =  reduxForm({
  form: 'NextWeekDriftForm',     // a unique identifier for this form
  enableReinitialize: true,
})(NextWeekDriftForm)

export default NextWeekDriftForm =  connect(
    state => ({
      initialValues:state.sendGood.driftMemberArray.formData,
    })
) (NextWeekDriftForm)
Run Code Online (Sandbox Code Playgroud)

结果,错误显示:

未捕获(在承诺中)TypeError:无法读取未定义的属性"map"

{member.hobbies.map( (item,keyIndex) => <MenuItem key={keyIndex} value={keyIndex} primaryText='hahah'/>

我的问题可能出在这段代码中.

我用

  <MenuItem  value='09090' primaryText='hahah'/>
  <MenuItem  value='09090' primaryText='hahah'/>
  <MenuItem  value='09090' primaryText='hahah'/>
Run Code Online (Sandbox Code Playgroud)

替换代码

 {member.hobbies.map( (item,keyIndex) =>
                     <MenuItem  key={keyIndex} value={keyIndex} primaryText='hahah'/>
Run Code Online (Sandbox Code Playgroud)

浏览器呈现得很好.

我想实现选择的动态选项.

无论如何,可以实现我的目标是可以的.如果在阅读完我的描述后你不明白这个问题.我会再次编辑这个问题.

Rom*_*mov 0

你看,控制台显示它hobbies是未定义的。从调试开始fieldsconsole.log(fields);进去之后你会看到什么renderMembers