2017-03-22 62 views
0

获取API的数据,我试图按照从Facebook的样品通量架构在 https://github.com/facebook/flux/tree/master/examples/flux-todomvc阵营通量从远程服务

发现哪里是这个架构,你会打电话给你的API从远程服务获取数据?

AppContainer有一个getState方法,该方法获取商店的初始状态。由于数据库调用尚未发生,因此这将为空。我可以在动作创建者中进行api调用。但是,我在哪里触发此操作?

AppContainer.js

function getStores() { 
    return [ 
     TodoStore 
    ]; 
} 

function getState() { 
    return { 
    todos: TodoStore.getState() 
    }; 
} 

回答

0

您应该创建一个动作调度,触发该读取请求并调度的结果取为有效载荷的动作。通过mapDispatchToProps处理此动作调度程序,并通过componentDidMount循环方法在组件内调用它。

+0

这就是我最终做的。我创建了一个顶级组件,并在那里启动了该操作。 mapDispatchToProps是redux的权利? – BeesNees

0

你应该创建Actions类,它会有方法。此方法将分派操作来存储和发送ajax数据。

例如一个Actions类方法:

changeCurrent(role: string): void { 
    // Things to do right now 
    dispatch(RolesActionID.ROLES_CHANGE_CURRENT, { 
     role: role 
    }); 

    let props: any = { Role: role }; 
    let data: any = formAjaxData("GetPrivileges", props, true); 

    // Send ajax 
    let post: any = $.post({ url: "/v1/json", data: data, contentType: "text/html; charset=utf-8" }) 
     .done(function (result: string): void { 
      dispatch(RolesActionID.ROLES_CHANGE_CURRENT_SUCCESS, { 
       rolePrivileges: result, 
       role: role 
      }); 
     }) 

     .fail(function (result: any): void { 
      // Fail actions 
     }); 
}; 

所以实际上你将有2-3调度的事件:

  1. 时动作开始(我们可以禁用EXPL提交按钮)
  2. 当我们得到成功ajax响应
  3. 当我们失败了Ajax响应(不要忘记再次启用SUBMIT按钮)
+0

这就是我最终做的。虽然我无法在一个行动中做多次派遣。我收到一个错误消息,说你在另一个调度正在进行时无法进行调度。 – BeesNees

+0

这可能是,如果您在“StoreClass”中完成此方法。最后你应该有2个班级: 1. NameStore; 2. NameActions; NameStore - 它是一个,注册到AppDispatcher,并且正在等待分派的动作(你不能在这里发送另一个动作) NameActions - 它是单独的类,它仅用于分派动作并发送ajax。 – Lojka