2016-05-24 2 views
1

Когда я пытаюсь вызвать создателя action, как это, он терпит неудачу, потому что this.props не определен.Почему только ES6 формы setTimeout видят реквизиты React?

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

Но когда я использую такую ​​версию ES6, реквизит доступен, и он работает.

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

Почему? Я продвинутый новичок и хотел бы это понять.

+0

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

+1

Большое спасибо. Я вижу, как этот вопрос может быть обманом в чистом javascript контексте. Я достаточно неопытен, что я сосредоточен на том, почему поведение было иным в контексте React/Redux, но я понимаю, что это не имеет значения. – jerimiah797

ответ

0

Это потому, что функции стрелок имеют фиксированный контекст, то же, что и родительская функция. Однако в обычных функциях контекст может измениться.

Для получения дополнительной информации см. MDN docs.