как установить переменную в пустой массив - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь написать функцию, которая удаляет все элементы из массива с именем selectedItems.

Это выглядит так:

  const selectNone = (e: any) => {

    let selectedItemsCopy = selectedItems;
    selectedItemsCopy = []

    setState(
      {
        ...state,
        areAllSelected: false,
        isChecked: false,
        selectedItems: selectedItemsCopy
      }
    );
  }

, но в setState selectedItems не обновляется до пустой копии массива. Что я делаю не так?

1 Ответ

2 голосов
/ 23 апреля 2020

Проблема, с которой вы столкнулись, заключается в том, что вы на самом деле изменяете состояние, что в 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
      }
    );
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...