Пусть в стейте notes
хранится массив
и элементы этого массива выводятся в абзацах:
function App() {
const [notes, setNotes] = useState([1, 2, 3, 4, 5]);
const result = notes.map((note, index) => {
return <p key={index}>{note}</p>;
});
return <div>
{result}
</div>;
}
Давайте сделаем инпут и кнопку с помощью которых можно будет реактивно добавлять новые абзацы. Пусть мы будем вводить текст в инпут, жать на кнопку и после этого должен появится новый абзац с введенным нами текстом.
Как вы уже знаете, для этого необходимо добавить новый элемент в стейт с массивом. После этого HTML код автоматически изменится.
Давайте реализуем описанное:
function App() {
const [notes, setNotes] = useState([1, 2, 3, 4, 5]);
const [value, setValue] = useState('');
const result = notes.map((note, index) => {
return <p key={index}>{note}</p>;
});
function addItem() {
setNotes([...notes, value]);
}
function changeInput(event) {
setValue(event.target.value);
}
return <div>
{result}
<input value={value} onChange={changeInput} />
<button onClick={addItem}>add</button>
</div>;
}
Можно переписать в короткой форме:
function App() {
const [notes, setNotes] = useState([1, 2, 3, 4, 5]);
const [value, setValue] = useState('');
const result = notes.map((note, index) => {
return <p key={index}>{note}</p>;
});
return <div>
{result}
<input value={value} onChange={event => setValue(event.target.value)} />
<button onClick={() => setNotes([...notes, value])}>add</button>
</div>;
}
Дан массив:
const notes = ['a', 'b', 'c', 'd', 'e'];
Выведите элементы этого массива в виде списка
ul
. Добавьте инпут для добавления
новых пунктов списка. Пусть добавление происходит
по потери фокуса в инпуте.
Модифицируйте предыдущую задачу так, чтобы
при добавлении новой li
текст инпута
очищался.