У меня две проблемы, которые являются результатом друг друга. Я заполняю два поля данными initialValue, а затем могу вставить другое поле в массив. Проблема возникла, когда я попытался изменить структуру initialValue из:
initialValues: {
rockSingers: [ "Axl Rose", "Brian Johnson"]
}
к:
initialValues: {
rockSingers: [{ singer: "Axl Rose" }, { singer: "Brian Johnson" }]
}
Первая проблема заключается в том, что теперь поле возвращает [object Object]. После отправки формы отображается правильный формат json, пока я не перейду к моей второй проблеме ... при добавлении нового значения, которое не соответствует формату данных initialValue - например,
{
"rockSingers": [
{
"singer": "Axl Rose"
},
{
"singer": "Brian Johnson"
},
"Tom Rudge"
]
}
Вот коды и ящик - https://codesandbox.io/s/8kzw0pw408



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуй это:
const renderRockSingers = ({ fields }) => (
<div>
<h3>Rock Singers:</h3>
{fields.map((rockSinger, index) => (
<div>
<Field
name = {rockSinger}
format = {value => value.singer}
parse = {value => ({ singer: value })}
key = {index}
component = "input"
/>
</div>
))}
<button type = "button" onClick = {() => fields.push({ singer: '' })}>
Add more
</button>
</div>
);
Измените renderRockSingers так, чтобы вы хватали объект, а не строку.
const renderRockSingers = ({ fields }) => (
<div>
<h3>Rock Singers:</h3>
{fields.map((rockSinger) => (
<div>
<Field name = {`${rockSinger}.singer`} key = "index" component = "input" />
</div>
))}
<button type = "button" onClick = {() => fields.push()}>
Add more
</button>
</div>
);Подробнее о компоненте FieldArray здесь: полевые массивы
<Field
name = {rockSinger}
key = {index}
component = "input"
format = {(value, name) => (value !== undefined ? value.singer : "")}
normalize = {value => ({ singer: value })}
/>
Песочница кода: https://codesandbox.io/s/7m1p9600y0
Это хороший ответ, я использовал его для своего сценария, когда у меня были другие дела. Спасибо
если вы не используете какой-либо вложенный FieldArray, вы можете указать начальное значение в формате массива
initialValues: { rockSingers: [ "Axl Rose" , "Brian Johnson" ] }, все остальное будет работать как есть