Из учебника по реагированию, в чем цель .bind(this)
в конце обратного вызова ajax? Правильно ли работает код без него?
data: JSON.stringify({text: text}),
success: function (data) {
this.setState({data: data});
}.bind(this),
Это гарантирует, что this
будет правильным объектом внутри обратного вызова. См. Function.prototype.bind().
Альтернативой для реагирования является:
myAjaxFunction: function(){
$.getJSON('/something', this.handleData);
},
handleData: function(data){
this.setState({data: data});
}
Это работает, потому что React обрабатывает привязку методов компонентов для вас.
Если вы запустили свой исходный код без привязки, вы получите эту ошибку: TypeError: undefined is not a function
, потому что this === window
в обратном вызове
или в строгом режиме: TypeError: Cannot read property 'setState' of undefined
, где this === undefined
в обратном вызове.
Назначение .bind(this)
в конце обратного вызова ajax позволяет this
быть связанным с вашим классом реагирования. Другими словами, вы можете добавить:
var self = this;
вне ajax, и он работает одинаково. Вы код равный:
var self = this;
$.ajax({
.
.
data: JSON.stringify({text: text}),
success: function (data) {
self.setState({data: data});
},
.
.
});
.bind(this)
ссылкаthis
становится пустой, если используется внутри пользовательской функции (определенной в компонентеactJs).