2016-08-26 43 views
1

嗨我是新手与反应,并且在ajax发布请求后更新应用程序状态有问题。 例如我的状态看起来像这样:React - 在ajax发布请求后更新状态的方法

state: { 
    persons: [] 
} 

然后我想新的人加入到状态,所以我取请求serwer,并有一个问题。 我应该从服务器更新集合返回设置新状态,还是应该返回响应并在请求回调中强制新请求到服务器以获取数据? 或者是否有其他选择,如监听器与任何响应状态ok后更新状态?

回答

0

我认为这取决于两件事情对我来说:

  1. 你必须对网络带宽和延迟超高效?
  2. 你已经有一个方法来执行ajax GET请求并更新状态吗?

如果1.的答案为YES,那么您需要从POST和更新状态的响应中获取数据。

如果1.的答案为NO,但对2.的答案为YES,则只需触发另一个ajax请求。

如果两者的答案都是NO,那么我会选择在代码中看起来更干净的任何一个。

另一个想法,但你需要每隔一段时间轮询一次列表吗?在这种情况下,您应该使用您已用于轮询的相同方法。

1

你可以直接setState内的ajax调用的成功函数。

var self = this; 
    $.ajax({ 
     type: 'GET', 
     url: "http://localhost:9000/abc", 
     dataType: 'json', 
     success: function(data) { 
      self.setState({persons: data}); 
     }, 
     error: function(jqXHR,textStatus,errorThrown) { 
      console.log(textStatus); 
     } 
    });  

我在整个项目中一直遵循这种方法,它的功能就像一个魅力。

+1

为什么绑定'this'当使用'self'? – Tikkes

+2

另外,你使用'let',那么为什么不使用箭头函数呢? –

+0

@NeilTwist如何使用箭头功能 –

0

您的Redux动作创建者将从服务器获取数据。您可能会从提取库(Axios,同构提取,...)获得承诺。

然后您必须使用商店中间件来处理异步操作:您可以使用Redux-Promise或Redux-Thunk来捕获Promise或调度函数而不是纯字符串操作。中间件允许您在获得可用数据(或发生错误)时分派普通操作。

当您的数据可用并且您的操作由中间件调用时,您的Reducer将创建新状态,并从操作负载中获取人员数组。

我建议你阅读终极版文档的这一部分: http://redux.js.org/docs/advanced/AsyncActions.html

异步操作和中间件是终极版的艰难部分之一,但是当你了解中间件的作品,它是不是真的复杂,你只需花一些时间阅读Redux文档。

有一个愉快的一天, 利玛窦