当前位置: 首页 > 面试题库 >

在Flux应用程序中应在何处提出Ajax请求?

楚昊明
2023-03-14
问题内容

我正在创建具有flux体系结构的react.js应用程序,并且试图弄清楚应该何时何地从服务器请求数据。有这个例子吗?(不是TODO应用!)


问题答案:

我强烈支持将异步写入操作放在动作创建者中,而将异步读取操作放在商店中。目标是将商店状态修改代码保留在完全同步的动作处理程序中;这使他们易于推理,并且易于进行单元测试。为了防止对同一端点的多个同时请求(例如,重复读取),我将把实际的请求处理移到一个单独的模块中,该模块使用promise来防止多个请求。例如:

class MyResourceDAO {
  get(id) {
    if (!this.promises[id]) {
      this.promises[id] = new Promise((resolve, reject) => {
        // ajax handling here...
      });
    } 
    return this.promises[id];
  }
}

尽管存储中的读取涉及异步函数,但有一个重要的警告,即存储不会在异步处理程序中更新自身,而是触发操作, 在响应到达 时才
触发操作。此操作的处理程序最终进行了实际状态修改。

例如,一个组件可能会:

getInitialState() {
  return { data: myStore.getSomeData(this.props.id) };
}

该商店可能实现了一种类似于以下内容的方法:

class Store {
  getSomeData(id) {
    if (!this.cache[id]) {
      MyResurceDAO.get(id).then(this.updateFromServer);
      this.cache[id] = LOADING_TOKEN;
      // LOADING_TOKEN is a unique value of some kind
      // that the component can use to know that the
      // value is not yet available.
    }

    return this.cache[id];
  }

  updateFromServer(response) {
    fluxDispatcher.dispatch({
      type: "DATA_FROM_SERVER",
      payload: {id: response.id, data: response}
    });
  }

  // this handles the "DATA_FROM_SERVER" action
  handleDataFromServer(action) {
    this.cache[action.payload.id] = action.payload.data;
    this.emit("change"); // or whatever you do to re-render your app
  }
}


 类似资料:
  • 问题内容: 我正在将现有的应用程序移植到Flux,并且对一个主题有些困惑。假设我有几个API端点,它们返回两级或三级嵌套对象。 例如,可能返回架构的JSON响应 如您所见,有各种各样的用户处于不同的嵌套级别: 如果我想在获取文章时随时使用新数据进行更新,则必须编写一个怪异的方法来检查文章API响应上的所有嵌套实体。而且,将存在很多重复,因为还有其他API端点具有不同的架构,有时文章嵌入在用户内部(

  • 问题内容: 我有一个struts2 webapp,需要在其中实现CSRF保护。对于状态表格,这是非常简单的。我只需要激活拦截器,然后设置要提交的表单即可。(在这里和这里解释) 但是,当我需要为不一定通过表单提交的POST AJAX调用(我使用jQuery)启用CSRF保护时,就会出现问题。在进行后续的AJAX调用时,我面临重用令牌的问题。 任何指针或不同的方法都是可以理解的。 问题答案: 目前,我

  • 问题内容: 我知道有很多类似的问题,但是没有一个是用户可以访问代码的HTML / javascript应用程序。 我有一个用nodejs编写的私有REST API。它是私有的,因为它的唯一目的是为我的HTML5客户端应用程序(Chrome应用程序和Adobe Air应用程序)提供服务器。因此,API密钥不是一个好的解决方案,因为任何用户都可以看到javascript代码。 我想避免机器人在服务器上

  • 问题内容: 我正在开发一个本机android应用程序,其中尝试使用2个开源库。问题是两个库都在各自的库中使用应用程序类。他们正在使用application标签下的“ android:name”在清单文件的相应源代码中注册这些类。问题是如何处理这种情况,因为众所周知,清单文件中只能使用ONE标签。我们是否可以在代码中注册/实例化应用程序类,以便我们在标记中仅提及一个库,而在代码中/实用地提及第二个库

  • 问题内容: 有人可以指出我使用jQuery创建带有Java(Servlet)的AJAX应用程序的教程。我当时在看使用JQuery在Java Web应用程序中实现Ajax 教程,该教程与我所需要的相似,但其中没有包含大多数细节。 如果您知道一个好的教程,文本+图形或视频,或者知道主要步骤并可以概述它们,那将不胜感激。我知道Google似乎应该很容易就能找到100个答案,但是事实并非如此,这就是我要问

  • 首先,超文本传输协议上的常规Ajax请求工作正常。当我试图在https上执行完全相同的Ajax请求(GET)时,问题就开始了。 在使用WEINRE进行调试时,我可以在网络选项卡中看到请求处于挂起状态,但我得到的是假空响应,其中包含status=0和其他属性empty。不仅如此,服务器端从未收到这些请求。看起来Android就是不让他们走。 在构建应用程序之前,我在XDK的构建设置中到处设置通配符: