2017-02-01 14 views
3

Я использую электрон и React и у меня есть некоторый код, который выглядит следующим образом:Объект Назначение Behaving Уничтожение того Жутко в конструкторе

constructor(props) { 
    super(props); 
    const { arr } = this.props; 
    ipcRenderer.on('event',() => { 
    console.log(this.props.arr); // will log updated values 
    console.log(arr); // always logs initial value 
    }); 
} 

Кто-нибудь есть какие-либо идеи, почему это может случаться? Я не могу воспроизвести это где-нибудь еще. Я пробовал делать подобные вещи с обработчиками окон и закрытиями, чтобы убедиться, что они ведут себя одинаково, но они этого не делают. Я пропустил что-то действительно очевидное?

const obj = { arr: [1, 2, 3] }; 
const { arr } = obj; 
obj.arr.push(4); 
arr.push(5); 

console.log(obj.arr); // => [1, 2, 3, 4, 5] 
console.log(arr); // => [1, 2, 3, 4, 5] 

ответ

3

я упускаю что-то действительно очевидное?

Предположительно новый массив присваивается this.props.arr. Простая репродукция:

const obj = { arr: [1, 2, 3] }; 
 
const { arr } = obj; 
 
obj.arr = [1]; 
 

 
console.log(obj.arr); // => [1] 
 
console.log(arr); // => [1, 2, 3]

деструктурирующие нет ничего магического. Эти два эквивалентны:

const { arr } = this.props; 
const arr = this.props.arr; 

arr имеет значение, которое this.props.arr имел в момент присвоения, в то время как this.props.arr дает значение в то время вы доступ его.

+0

Спасибо! Вот и все. – epiqueras

 Смежные вопросы

  • Нет связанных вопросов^_^