Нет таких правил, как использовать этот метод для этого и этот метод для этого.Однако необходимо выполнить два условия, чтобы гарантировать, что React знает об изменениях состояния.
- Используйте
setState
для обновления состояния - Ключи верхнего уровня в объекте состояниядолжны быть установлены с новыми значениями или ссылками.Т.е. при мелком сравнении выглядят иначе.
Принятый вами ответ отвечает обоим этим требованиям.Ключевая строка:
var array = [...this.state.people] // make a separate copy of the array
Обратите внимание на комментарий.Оригинальный плакат прояснил, что он создает новую ссылку на массив, используя синтаксис .Операция сплайсинга, которую он выполняет позже, находится в этом новом массиве, не имеет значения, какую операцию он выполняет позже, React будет вызывать метод рендеринга по крайней мере один раз, когда новый массив задан как часть состояния.
Почему фильтр?
Фильтр фильтрует массив по предикату и возвращает новый объект массива с результатами.В некоторых ситуациях это может быть более гибким и удобным в использовании, но имеет совершенно другое поведение.Splice позволяет точно удалять непрерывный блок элементов по индексу, тогда как фильтр удаляет все элементы, которые не соответствуют предикату.
Решение об использовании, которое остается за вами, зависит от того, что лучше для варианта использования.React будет выполнять рендеринг до тех пор, пока выполняются вышеуказанные условия.
Примечание: В представленной ситуации фильтр будет предпочтительным выбором, так как он только циклически повторяется по массиву один раз.Операция сплайсинга требует, распространение и indexOf
перед ней, что приводит к множественным перечислениям в массиве.