在我正在开发的应用程序中,有一个用于进行调查/民意调查的模块。后端已经编程好了,基本上有一个端点可以接受主体中的一个复杂对象,然后它会构建轮询。复杂对象可以根据投票和问题类型而有所不同,有些是多项选择,有些是投票,有些是开放式的。我正在尝试构建这样的复杂对象的示例:
{
"title": "Newish first poll",
"description": "juan's first wizard poll",
"status": "new",
"start_date": "2019-03-12 08:00:00",
"end_date": "2019-03-25 08:00:00",
"questions" : [
{
"question_text":"HOW CAN DIS BE",
"type":"1",
"choices": []
},
{
"question_text":"Choose your weapon",
"type":"0",
"choices": [
{
"choice_text": "Sword",
"description": "Sharp and durable, the sword is very popular."
},
{
"choice_text": "Hammer",
"description": "Stop!"
},
{
"choice_text": "Poetry",
"description": "Nothing more devastating than a poetry slam"
}
]
},
{
"question_text":"Do you agree?",
"type":"1"
}
]
}
所以本质上,该对象具有称为问题的 fieldArray,其中包含问题对象。但是,如果是多项选择题,这些问题对象也可以包含选项数组,并且每个选项都有 2 个潜在字段,选项文本和选项描述。
一般而言,仅使用 onefield 数组和可用的 mutator push,我就可以推送一个完整的问题对象,目前硬编码到一个像这样传递的变量中:push('questions',sampleQuestion1)
按下按钮时。
由于问题数组已经包含选择 [] 数组,因此该表单将起作用,但是,我无法以与 FieldArray 的顶层相同的方式在其他数组中呈现选择数组的值
这就是基本实现的样子
<FieldArray name='questions'>
{({fields})=>(
<div>
{fields.map((question,i)=>(
<div key={i}>
<div className={'form-group'}>
<InputField name={`${question}.question_text`} placeholder={'Pregunta'} disabled/>
<FieldArray name={'choices'}>
{({fields})=>(
//i would like to be able to map through fields of the choices array, if present
)}
</FieldArray>
</div>
</div>
))}
</div>
)}
</FieldArray>
我尝试在另一个 fieldarray 中放入一个组件,这当然是相当幼稚的,我很快发现 push mutator 已经用添加的数据调用了,并且我无法映射选择的字段,因为传入的 question 对象父母fields.map
实际上并不是问题对象本身。
我已经尝试了一些其他技术并且已经阅读了文档,但我有点难过。如果有人可以帮助我弄清楚这是否可能,我将非常感激