Следовал по учебнику ReactJS со своего сайта.ReactJS issue:() => vs function()
var Comment = React.createClass({
render: function() {
return (
<div className="comment">
<h2 className="commentAuthor">
{this.props.author}
</h2>
{this.props.children}
</div>
);
}
});
var CommentList = React.createClass({
render:() => {
return (
<div className="commentList">
<Comment author="Pete Hunt">This is one comment</Comment>
<Comment author="Jordan Walke"> This is *another* comment</Comment>
</div>
);
}
});
var CommentForm = React.createClass({
render:() => {
return (
<div className="commentForm">
Comment Form
</div>
);
}
});
var CommentBox = React.createClass({
render:() => {
return (
<div className="commentBox">
<h1>Comments</h1>
<CommentList />
<CommentForm/>
</div>
);
}
});
ReactDOM.render(
<CommentBox />,
document.getElementById("content")
);
Однако, если использовать стрелки обозначения в первом компоненте Комментарии, а именно:
(* PARAMS *) => {}
вместо нормальной функции декларации обозначений, а именно:
функция (* Титулы *) {}
интерпретатор хром выложит следующее сообщение об ошибке:
Uncaught TypeError: Не удается прочитать свойство «реквизита» неопределенных
Может кто-нибудь пролить свет на этот вопрос?
Функции стрелки имеют статическую лексическую форму, которая может быть определена путем чтения их декларации. На английском языке их значение не может быть изменено посредством вызова, вызова, применения или привязки метода. Поскольку «это» не было определено, когда функция была создана, она всегда будет неопределенной независимо от того, как ее вызвал. – Shashank
Вы не можете использовать 'this' с' => 'так, как вы предполагаете,' ({foo: x => this}). Foo(); // === window' –