我从后端请求数据。数据是礼品数据和人员数据。
我的目标是实现连接礼物和人。每个人都会送礼物。
我使用material-ui
和redux-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
}
]
我想得到这个结果:
我点击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)
结果,错误显示:
未捕获(承诺)TypeError:无法读取属性&#39; map&#39;未定义的
{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'/>
替换代码
{member.hobbies.map( (item,keyIndex) =>
<MenuItem key={keyIndex} value={keyIndex} primaryText='hahah'/>
浏览器呈现良好。
我想实现选择的动态选项。
无论如何,可以实现我的目标是可以的。 如果您在阅读我的描述后没有理解这个问题。我会再次编辑这个问题。
答案 0 :(得分:1)
当app加载member.hobbies时,problably尚未定义。如果未定义,请尝试声明一个变量将此数组设置为null:
const hobbies = member.hobbies || []
然后:
{hobbies.map( (item,keyIndex) =>
<MenuItem key={keyIndex} value={keyIndex} primaryText='hahah'/>
答案 1 :(得分:0)
您看,控制台显示hobbies
未定义。从调试fields
开始。 console.log(fields);
renderMembers
后MKMapRectContainsPoint(self.mkMapView.visibleMapRect, MKMapPointForCoordinate(coordinate));
后会看到什么?
答案 2 :(得分:0)
希望以下代码段对您有所帮助
{this.props.data.map((e, keyIndex) => {
return (<MenuItem key={keyIndex} value={e.warehouseId}>{e.name}</MenuItem>);
}) }