2017-02-01 6 views
3

Ich bin mit Elektronen- und Reagieren, und ich habe einige Code, der wie folgt aussieht:Objekt Destrukturierung Zuordnung Behaving Weirdly in Constructor

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 
    }); 
} 

Hat jemand eine Ahnung, warum dies passiert sein könnte? Ich kann das nirgendwo anders reproduzieren. Ich habe versucht, ähnliche Dinge mit Fenster-Event-Handlern und Schließungen zu tun, um zu sehen, ob sie sich auf die gleiche Weise verhalten, aber sie tun es nicht. Fehle ich etwas wirklich offensichtlich?

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] 

Antwort

3

Fehle ich etwas wirklich offensichtlich?

vermutlich eine neue Array wird this.props.arr zugeordnet. Einfache Repro:

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

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

Destrukturierung ist nichts Magisches. Diese beiden sind äquivalent:

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

arr den Wert hält, dass this.props.arr zum Zeitpunkt der Zuordnung hatte, während this.props.arr gibt Ihnen den Wert an der Zeit, die Sie Zugang es.

+0

Danke! Das war's. – epiqueras

Verwandte Themen