В jQuery привязать на успехи "Аякса"
почему мы вызываем bind при вызовах успеха Ajax посмотрите на этот код
$.ajax({
url: myurl,
dataType: 'json',
success: function(data) {
this.setState({data: data});
}.bind(this)
если мы не вызываем bind, то это имеет значение или есть преимущество использовать bind здесь
4 ответов
нужно позвонить bind()
для того, чтобы заставить ваш контекст обратных вызовов (this
), чтобы быть правильным. В противном случае он вызывается в глобальном контексте по умолчанию (по-видимому, jQuery вызывает его с контекстом объекта jqXHR). bind()
устанавливает контекст вашей функции в whatever this
должен быть.
@shubham, его синтаксис javascript для использования текущего это в вашей функции обратного вызова, как вы упомянули в
success: function(data) {
this.setState({data: data});
}
, первый аргумент функции bind() будет действовать так в вызывающей функции, вы должны пройти функции apply() и call (), поскольку это было бы полезно для вас.
Я полагаю, что ваш код реагировать. Потому что недавно я столкнулся с подобной проблемой, связанной с реагировать.
вернемся к вашему вопросу. Я думаю, что bind
это функция преобразования. Код следующим образом:
componentDidMount: function() {
var _this = this;
$.ajax({
url: this.props.url,
dataType: 'json',
cache: false,
success: function(data) {
_this.setState({data: data});
}
});
},
равен:
componentDidMount: function() {
$.ajax({
url: this.props.url,
dataType: 'json',
cache: false,
success: function(data) {
this.setState({data: data});
}.bind(this)
});
},
а так, я думаю, вы можете понять, что такое bind
Я согласен со Скимонстером.bind () устанавливает контекст вашей функции на то,что это должно быть, или ваша функция даст такую ошибку:Uncaught TypeError: this.выполнении функция setState не функция