Angular2 + ngrx / store:如何在循环中改变状态?

时间:2017-05-08 16:54:26

标签: javascript angular redux ngrx

在使用ngrx / store的Angular2应用程序中,我有一个方法可以从API查询一些数据并将其发送到商店。它工作正常:

get(id: number) {
  return this.http.get(`http://localhost:3000/contents/${id}.json`).map( response => {
    return response.json();
  })
  .map( (content: Content) => {
    this.store.dispatch({ type: 'GET_CONTENT', payload: content });
    return content;
  });
}

我还有另一个查询API的服务,它返回一个数组os对象。在这种情况下,我这样做:

return this.http.get(`http://localhost:3000/contents/${id}/contents.json`).map( response => {
  return response.json();
})
.map( ( contents: Array<Content>) => {
  contents.map( payload => {
    this.store.dispatch({ type: 'GET_CONTENT', payload });
  });
  return contents;
})

它可以工作,但商店的状态会多次改变。有更好的方法吗?也许同时在商店中创建另一个动作(&#39; GET_CONTENTS&#39;)?或者我可以说,不知何故,只有在&#39; contents.map&#39;之后才能更改状态。结束?

1 个答案:

答案 0 :(得分:2)

一个简单的解决方案是编辑您的reducer以期望Array<Content>有效负载。然后,如果单个Content只是在数组中调度该值:

this.store.dispatch({ type: 'GET_CONTENT', [content] });