Я перерабатываю некоторый код в приложении React, которое я создал, чтобы делать аякс-запросы к Tumblr api с superagent вместо jQuery.Невозможно прервать суперагент в приложении React
Обратите внимание, что при использовании coffeescript @ эквивалентно «this».
Мой JQuery Ajax вызов Tumblr API выглядит следующим образом:
App = React.createClass
loadPhotos: ->
data =
api_key: 'xxx'
blog = 'tumblrname'
url = "http://api.tumblr.com/v2/blog/#{blog}.tumblr.com/posts/photo"
@xhr = $.ajax
url: url
type: 'GET'
dataType: 'jsonp'
data: data
success: (data) =>
console.log @xhr, @
Выход консоли для этого:
Object {readyState: 4, responseJSON: Object, status: 200, statusText: "load"} Constructor {props: Object, context: Object, refs: Object, updater: Object, state: Object…}
Все работает правильно, когда я использую JQuery и я можно вызвать @ xhr.abort(), чтобы прервать вызов ajax.
Однако, когда я переключаюсь на использование суперагента, вызов выполняется успешно, и я могу получить доступ к данным ответа, однако я не могу получить доступ к переменной @xhr, чтобы прервать запрос.
Мой SuperAgent Аякса вызов:
superagent = require 'superagent'
jsonp = require 'superagent-jsonp'
App = React.createClass
loadPhotos: ->
data =
api_key: 'xxx'
blog = 'tumblrname'
url = "http://api.tumblr.com/v2/blog/#{blog}.tumblr.com/posts/photo"
@xhr = superagent
.get url
.use jsonp
.query data
.end (err, res) =>
console.log @xhr, @
Выход консоли для этого кода:
undefined Constructor {props: Object, context: Object, refs: Object, updater: Object, state: Object…}
Если изменить суперагент .END использовать -> вместо => консоли. log (это) возвращает:
Request {_query: Array[2], method: "GET", url: "http://api.tumblr.com/v2/tagged", header: Object, _header: Object…}
Это то, что мне нужно для вызова .abort(), чтобы прервать вызов ajax. К сожалению, мне нужно использовать жирную стрелку, чтобы иметь возможность использовать this.state при выполнении манипуляций с данными ответа.
Мой вопрос: почему @xhr возвращает undefined, когда я использую суперагент вместо jQuery, и как я могу обновить свой код, чтобы разрешить доступ к @xhr, чтобы я мог называть его .abort() при необходимости?
как о 'я = this' .. забыть, если вы не можете сделать это в сСт по какой-то причине – azium
я не уверен, я понимаю, что вы предлагаете? У меня нет причин задавать себе = это, о чем я могу думать, жирная стрела уже делает это для меня. Мне нужен доступ к переменной this.xhr, а также переменные this.state в функции суперагентной реакции. У меня есть доступ к this.state из-за толстой стрелки, но не this.xhr. – satyrsynth
Напишите 'self = this' где-то в методе, чтобы у вас был доступ к' self.state', затем используйте тонкую стрелку в 'end', чтобы получить доступ' this.abort' – azium