2016-05-24 7 views
1

Wenn ich versuche, einen Reduction-Aktionsersteller wie diesen aufzurufen, schlägt dies fehl, weil this.props undefiniert ist.Warum kann nur die ES6-Form von setTimeout meine React-Requisiten sehen?

setTimeout(function(){ 
    birthday = window.document.getElementById('birthday') 
    this.props.actions.setBirthday(birthday.value) 
    }, 100); 

Aber wenn ich die ES6-Version so verwende, sind die Requisiten zugänglich und es funktioniert.

setTimeout(() => { 
    birthday = window.document.getElementById('birthday') 
    this.props.actions.setBirthday(birthday.value) 
    }, 100) 

Warum? Ich bin ein fortgeschrittener Anfänger und würde das gerne verstehen.

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#Lexical_this –

+1

Vielen Dank. Ich kann sehen, wie diese Frage in einem reinen Javascript Kontext ein Betrogener sein könnte. Ich bin unerfahren genug, dass ich mich darauf konzentriert habe, warum das Verhalten in einem React/Redux-Kontext anders ist, aber mir ist klar, dass das irrelevant ist. – jerimiah797

Antwort

0

Das liegt daran, dass Pfeilfunktionen einen festen Kontext haben, genau wie die Elternfunktion. In normalen Funktionen kann sich der Kontext jedoch ändern.

Weitere Informationen finden Sie unter MDN docs.

Verwandte Themen