В приложении, которое я разрабатываю, есть модуль для проведения опросов / опросов. Бэкэнд уже был запрограммирован, и в основном есть конечная точка, которая принимает сложный объект в теле, а затем будет строить опрос. Сложный объект может варьироваться в зависимости от типа опроса и типа вопроса, некоторые из них имеют множественный выбор, а некоторые - голоса, а некоторые являются открытыми. Примером этого сложного объекта я пытаюсь построить LOOS, как это:
{
"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 потенциальных поля, текст выбора и описание выбора.
В общих чертах, используя только массив из одного поля и доступную мутацию, я могу выдвинуть объект полного вопроса, в настоящее время жестко запрограммированный в переменную, передаваемую так: push('questions',sampleQuestion1)
при нажатии кнопки.
Поскольку массив вопросов уже содержит массив choices [], то форма будет работать, однако я не могу отобразить значения массива choices внутри другого так же, как с верхним уровнем 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>
Я попытался вставить компонент внутри другого полевого массива, это, конечно, довольно наивно, и я быстро обнаружил, что push-мутатор уже был вызван с добавленными данными, и что я не могу отобразить поля выбора, поскольку вопрос Объект, переданный в родительском fields.map
, на самом деле не является объектом вопроса.
Я попробовал несколько других техник и был прочитан в документации, но я немного озадачен. Если бы кто-нибудь мог помочь мне выяснить, возможно ли это, я был бы очень признателен