Проблема, с которой вы столкнулись, заключается в том, что вы на самом деле изменяете состояние, что в React запрещено. В этом случае решить очень просто, просто поместите []
внутри setState
напрямую, без каких-либо переменных:
const selectNone = (e: any) => {
setState(
{
...state,
areAllSelected: false,
isChecked: false,
selectedItems: []
}
);
}
Метод, который вы используете для создания копии массива, не фактически не копирует массив и вместо этого просто создает ссылку на оригинал (вот как работает JS). Чтобы сделать правильную копию (например, чтобы иметь возможность вносить изменения, а не просто очищать массив), вы должны использовать Array.from()
.
Вот пример
const selectNone = (e: any) => {
let selectedItemsCopy = Array.from(selectedItems);
selectedItemsCopy[x] = changedValue;
setState(
{
...state,
areAllSelected: false,
isChecked: false,
selectedItems: selectedItemsCopy
}
);
}