Выбор ответа Junior Состояние и useState/useReducer обновлено
sort и state
Вопрос
Кнопка «Сортировать» не меняет порядок на экране. Какое исправление верное?
function sortByName() {
items.sort(byName);
setItems(items);
}
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: setItems(items.toSorted(byName)). sort сортирует массив на месте и возвращает ту же ссылку, поэтому React не видит изменения (и заодно мутирован текущий state). toSorted (ES2023) возвращает новый массив.
Варианты ответа
- Вызвать
setItems(items)дважды подряд setItems(items.toSorted(byName))правильный ответ- Добавить
key={items.length}на список - Обернуть
items.sort(byName)вuseMemo
Разбор
sort сортирует массив на месте и возвращает ту же ссылку, поэтому React не видит изменения (и заодно мутирован текущий state). toSorted (ES2023) возвращает новый массив. Повторный вызов с той же ссылкой ничего не меняет. key и useMemo к причине отношения не имеют.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Состояние и useState/useReducer»
- Производное значение
- Стабильность dispatch
- Батчинг
- Ленивая инициализация state
- Функциональный апдейтер
- useReducer
- Апдейтер вперемешку со значением
- Ленивая инициализация