Reactjs 如何在有回流的商店中使用AJAX获得初始状态

Reactjs 如何在有回流的商店中使用AJAX获得初始状态,reactjs,refluxjs,Reactjs,Refluxjs,最近我一直在研究React和REFLOW。 我陷入困境的一部分是,我无法在商店中使用AJAX获得初始状态。 我尝试的只是调用Store.js中getInitialState函数中的ajax($.getJSON),用ajax响应(JSON)设置初始状态,并确定状态是什么。 我期望从AJAX调用获得的输出是JSON数组列表,但实际输出将是undefined 那么,在有回流的商店中,如何使用AJAX获取InitialState呢 代码是这样的 // in store.js getInitialStat

最近我一直在研究React和REFLOW。 我陷入困境的一部分是,我无法在商店中使用AJAX获得初始状态。 我尝试的只是调用Store.js中
getInitialState
函数中的
ajax($.getJSON)
,用ajax响应(JSON)设置初始状态,并确定状态是什么。 我期望从AJAX调用获得的输出是JSON数组列表,但实际输出将是
undefined

那么,在有回流的商店中,如何使用AJAX获取InitialState呢

代码是这样的

// in store.js
getInitialState: function() {
  $.getJSON('/sample').done(function(result){
    this.list = result;
  });
  return this.list;
}

// in sampleApp.jsx
mixins: [Reflux.connect(Store, "list")],

  render() {
    console.log(this.state.list);
    // I expected this output would be JSON lists, but the actual output will be undefined.

    return ();
  } 

此代码存在许多问题:

getInitialState: function() {
  $.getJSON('/sample').done(function(result){
    this.list = result;
  });
  return this.list;
}
首先,在Ajax请求返回数据之前,返回
this.list
。这实际上意味着您正在从该函数返回
undefined
。第二个问题是,您正在Ajax回调中使用
this
,它不会指向回流存储。为此,您需要使用箭头函数和ES6 transpiler

但是无论如何,您不应该在
getInitialState
中执行Ajax请求。你要找的是这样的东西:

var MyStore = Reflux.createStore({
  getInitialState: function () {
    return {
      list: []
    }
  },
  init: function () {
    var self = this;
    $.getJSON('/sample').done(function (result) {
      self.trigger({list: result});
    });
  }
});

此代码存在许多问题:

getInitialState: function() {
  $.getJSON('/sample').done(function(result){
    this.list = result;
  });
  return this.list;
}
首先,在Ajax请求返回数据之前,返回
this.list
。这实际上意味着您正在从该函数返回
undefined
。第二个问题是,您正在Ajax回调中使用
this
,它不会指向回流存储。为此,您需要使用箭头函数和ES6 transpiler

但是无论如何,您不应该在
getInitialState
中执行Ajax请求。你要找的是这样的东西:

var MyStore = Reflux.createStore({
  getInitialState: function () {
    return {
      list: []
    }
  },
  init: function () {
    var self = this;
    $.getJSON('/sample').done(function (result) {
      self.trigger({list: result});
    });
  }
});

或者,如果不使用es6 transpiler,只需调用bind。或者,如果不使用es6 transpiler,只需调用bind。