Я изучаю React, используя хуки для создания приложения. Я следовал учебному пособию, однако я хотел бы внести в него некоторые изменения. У меня есть объект с несколькими строковыми элементами и одним элементом массива:
const [recipe, setRecipe] = useState({
title: '',
description: '',
ingredients: [],
instructions: '',
tags: 'none'
});
Изначально в учебнике были все строковые элементы, поэтому следующий код прекрасно работал для обновления состояния:
setRecipe({ ...recipe, [e.target.name]: e.target.value });
}
Пример одного из полей ввода, которые были похожи.
<input
type='text'
placeholder='Title'
name='title'
value={title}
onChange={onChange}
/>
Теперь, когда я изменил один из элементов на массив, он больше не работает. Я пробовал несколько способов сделать это, например:
const [test, setTest] = useState({
ingredients: ['bread', 'milk', 'honey']
});
const [query, setQuery] = useState('');
const updateQuery = e => {
setQuery(e.target.value);
};
const addItem = e => {
e.preventDefault();
setTest(test => ({ ingredients: [...test.ingredients, query] }));
};
return (
<div>
<button className='btn btn-light btn-block' onClick={addItem}>
Add ingredient
</button>
<input
type='text'
placeholder='Description'
name='ingredients'
value={ingredients}
onChange=(updateQuery)
/>
</div>
<div>
{test.ingredients.map(data => (
<ul key={data}>{data}</ul>
))}
</div>
);
Я изо всех сил пытаюсь найти решение.
Помощь будет принята с благодарностью.