如何在带有Reflux的商店中使用AJAX获取初始状态

时间:2015-05-13 10:47:47

标签: reactjs refluxjs

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

那么如何在带有Reflux的商店中使用AJAX获取初始状态?

代码是这样的......

// 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 ();
  } 

1 个答案:

答案 0 :(得分:4)

此代码存在许多问题:

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

首先,在Ajax请求返回数据之前返回this.list。这实际上意味着您从该函数返回undefined。第二个问题是你在Ajax回调中使用this,它不会指向Reflux商店。你需要使用箭头功能和ES6转换器。

但是你不应该在getInitialState中做一个Ajax请求。你正在寻找的是这样的:

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