#javascript #reactjs #destructuring #spread-syntax
#javascript #reactjs #деструктурирование #распространение-синтаксис
Вопрос:
Похоже, что есть предпочтительная причина для распространения, а не для деструктурирования, но я не понимаю, почему. Конечно, при написании / чтении кода деструктурирование намного проще и требует меньше кода, но некоторые учебные пособия, похоже, предпочитают распространение, но в этих примерах они, похоже, не извлекают 2 или более элементов из состояния. Кажется странным писать:
let obj1 = {...this.state.obj1};
let obj2 = {...this.state.obj2};
let obj3 = {...this.state.obj3};
когда это намного чище
let {obj1,obj2,obj3} = this.state;
Это предполагает, что я планирую сделать что-то подобное после получения этих значений
obj1.foo = "bar";
obj1.baz = "qux";
obj2.foo = "bar";
obj3.foo = "baz";
this.setState({obj1,obj2,obj3});
Почему одно лучше другого, и если распространение предпочтительнее, есть ли способ сделать код более чистым?
Комментарии:
1. но в этих примерах они, похоже, не извлекают 2 или более элементов из состояния Тогда я бы назвал эти плохие учебные пособия, IMO
2. Распространение фактически дает вам весь объект состояния. Тогда как при деструктурировании у вас есть определенный объект, присвоенный тому же имени переменной, что и в
{}
defined. Оба имеют разные варианты использования. Они не похожи3. @MeetZaveri Прошу прощения, я неправильно написал синтаксис распространения. Я имел в виду включить распространение каждого отдельного объекта. {…this.state.obj1} вместо {…this.state}
Ответ №1:
К сожалению, я не смог получить здесь ответ. Благодаря Reddit теперь я могу ответить на этот вопрос.
Распространение создает неглубокую копию. Деструктурирование создает ссылку, которая вызывает прямое изменение состояния. Всегда используйте распространение при извлечении из состояния для обратной записи в состояние. Деструктурирование прекрасно, когда используется только для чтения из состояния.