Вопрос проверяет понимание управления состоянием в React и методов обновления данных в списках.
В React состояние (state) должно обновляться иммутабельно, то есть без прямого изменения существующих данных. Для списков это означает, что мы не можем просто изменить свойство объекта внутри массива — нужно создать новый массив с обновленным элементом.
Используйте метод map, который проходит по каждому элементу массива и возвращает новый массив. Внутри колбэка найдите нужный элемент (например, по id) и верните его копию с измененным статусом. Для остальных элементов верните их без изменений.
const [items, setItems] = useState([
{ id: 1, status: 'active' },
{ id: 2, status: 'inactive' }
]);
const toggleStatus = (id) => {
setItems(prevItems =>
prevItems.map(item =>
item.id === id
? { ...item, status: item.status === 'active' ? 'inactive' : 'active' }
: item
)
);
};Иммутабельность гарантирует, что React может эффективно отслеживать изменения и перерисовывать только те компоненты, которые действительно изменились. Прямая мутация (например, items[0].status = 'new') не вызовет перерендер, так как ссылка на массив останется прежней.
Используйте map для обновления статуса элемента списка в React. Это простой, читаемый и соответствующий принципам иммутабельности способ, который гарантирует корректную работу виртуального DOM и предотвращает баги с состоянием.
Уровень
Рейтинг:
4
Сложность:
3
Навыки
JavaScript
React
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию