reactjs - 通量: return values from AJAX to the component

标签 reactjs reactjs-flux

我正在开发简单的 Flux+Reactjs 应用程序,在我的商店中我有:

var ProfileStore = merge(EventEmitter.prototype, {
/**
   * Get the entire collection of Profiles.
   * @return {object}
   */
  getAll: function() {
    //ajax call to mongolab
    var url = "https://api.mongolab.com/api/1/databases/bar/collections/profiles?apiKey=foo-"
    var jsPromise = Promise.resolve($.ajax(url));
    jsPromise.then(function(response) {
        return response;
    });

  },

  emitChange: function() {
    this.emit(CHANGE_EVENT);
  },

  /**
   * @param {function} callback
   */
  addChangeListener: function(callback) {
    this.on(CHANGE_EVENT, callback);
  },

  /**
   * @param {function} callback
   */
  removeChangeListener: function(callback) {
    this.removeListener(CHANGE_EVENT, callback);
  }
});

然后在我的组件中我有:

var ProfileApp = React.createClass({

    getInitialState: function() {
        return {
            allProfiles: ProfileStore.getAll()
        };
    },

});

当我在 getAll() 函数中使用 console.log() 时,我可以看到结果,但没有任何内容被传递到我的组件,有关于如何修复此问题的指示吗?

最佳答案

其他人指出了您的代码中与 promise 相关的问题。但是,您尝试在商店中执行的操作的另一个问题是您尝试直接处理响应,而不是调度新操作。

在 Flux 中,数据应始终源自操作。函数 getAll() 应该仅返回本地存储的 allProfiles,类似于 andrewkshim 的建议,但没有 XHR。

相反,请将您尝试执行的操作分成以下类型的两个操作:

PROFILES_REQUEST_GET :这是由用户单击按钮或任何导致发出请求的原因创建的 - 它会启动 XHR 请求。

PROFILES_REQUEST_SUCCESS :这是 XHR 的成功回调创建的操作。此操作包含新数据,商店可以相应地填充其 allProfiles

关于reactjs - 通量: return values from AJAX to the component,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26451659/

相关文章:

css - 如何从 react 组件的 Prop 设置现有CSS类的颜色

javascript - 在 if block 中 react 不渲染组件

javascript - @reach/router 嵌套 protected 路由

javascript - React Flux 存储发出事件不起作用

javascript - ReactJS 根据数组的值渲染 OBJ.map

javascript - 如何为 React Array.map() 迭代应用 CSS 动画?

node.js - react js : Rendering multiple index html in a single page applications

javascript - 如何处理 Flux 和 React.js 中的非 View 更改操作

reactjs - 刷新 React 组件或 Flux/Redux 中的逻辑?

reactjs - Redux 状态通过数据库持久化