首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将新数据更新/推送到NgRedux状态

将新数据更新/推送到NgRedux状态
EN

Stack Overflow用户
提问于 2018-06-18 09:49:49
回答 1查看 1.3K关注 0票数 1

我是新的角和写入服务,我将使用它来添加新的地址(张贴到一个REST )。

saveAddress方法调用返回服务器上新创建的address对象。

我想把它插入到已经存在的地址数组中。我试着做这样的事情:

代码语言:javascript
复制
saveAddress( payload ) {
    this.httpClient.post( this.endpoint, payload).subscribe(
      response => {
        this.ngRedux.select( s => s.addresses ).subscribe( addresses => {
          let data = addresses.data.push( response )

          this.ngRedux.dispatch({ type: ADD_ADDRESS_SUCCESS, payload: data })
        })
      },

      err => {
        this.ngRedux.dispatch({ type: ADD_ADDRESS_ERROR })
      }
    )
  }

我怎样才能做好呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-18 10:51:08

除了在Store中,您不能在任何其他地方更改reducer (状态)。还原器接收一个操作(ADD_ADDRESS_SUCCESS)及其有效载荷({address: {...}}),然后使用该信息更新存储:

代码语言:javascript
复制
reducer(state = initialState, action) {
  switch (action.type) {
    case ADD_ADDRESS_SUCCESS:
      return Object.assign({}, state, {
        addresses: state.addresses.push(action.payload.address)
      })
    default:
      return state
  }
} 

注意,我们总是复制状态,而不对其进行变异。要真正理解它,请阅读文档中的@angular/store。

对于API调用,您应该使用Epics:将Epic看作是在处理副作用时将一个操作转换为一个或多个其他操作的管道。在您的示例中,epic响应于ADD_ADDRESS_REQUEST,使用有效负载进行API调用,然后根据API调用的结果将动作转换为ADD_ADDRESS_SUCCESSADD_ADDRESS_ERROR。它永远不会更新状态本身,而是将其委托给处理ADD_ADDRESS_SUCCESSADD_ADDRESS_ERROR的还原程序。

在相应的@ar角-redux/存储文档中阅读更多关于史诗的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50906750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档