Какой из этих двух методов лучше управлять состоянием?

При изменении состояния в React какой из них будет предпочтительным (или нет предпочтительного способа)

1)

handleDeleteOption(optionToRemove){

this.setState((prevState)=>({
options: prevState.options.filter((option)=>{
  return optionToRemove !== option    })
}))
}

или

2)

handleDeleteOption(option){

this.setState((prevState)=>{
  const newArray = [...prevState.options]
  newArray.splice(newArray.indexOf(option), 1) 
  return{
    options: newArray
  }
})
}

Спасибо !

Фильтр считается более «функциональным» подходом и не использует методы, которые изменяют массив, поэтому вам не нужно знать, что вы должны сначала распространить его на новый. Он также выглядит чище и его можно сковать. Вам также не нужно беспокоиться о том, что indexOf не найдет элемент и не получит неожиданных результатов, если не будет проверен.

Dominic 20.08.2018 11:52

Спасибо за быстрый ответ! :)

Michael 20.08.2018 11:54
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
47
1

Ответы 1

Есть также:

this.setState({
 options: [...this.state.options.splice(optionIndex, 1)]
})

Более короткий и чистый способ.

Разве это не будет прямым изменением состояния в памяти, что не рекомендуется?

Michael 20.08.2018 11:58

Мы используем оператор спреда! Это клонирует объект. Итак, никаких мутаций.

Bhojendra Rauniyar 20.08.2018 11:58

предложения: 1- splice вернет удаленный элемент, а не новый массив без этого элемента, 2- setState является асинхронным, поэтому this.state в setState не является хорошей идеей.

Mayank Shukla 20.08.2018 12:11

@MayankShukla Я привел только пример, OP может использовать const {options} = this.state вне setState.

Bhojendra Rauniyar 20.08.2018 12:13

Дело в том, что для таких сценариев мы используем функциональный setState (prevState), также не принимайте это на свой счет, это было всего лишь предложением :)

Mayank Shukla 20.08.2018 12:19

@BhojendraNepal, когда вам нужно вычислить новое значение состояния на основе некоторого предыдущего значения состояния, вы должны передать функцию обратного вызова методу this.setState вместо прямого чтения из this.state. В противном случае велика вероятность получить несинхронизированные данные. См. Дополнительную информацию в официальной документации: reactjs.org/docs/react-component.html#setstate

falinsky 20.08.2018 18:08

Другие вопросы по теме