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

时间:2018-06-18 09:49:49

标签: javascript angular redux angular-redux ngredux

我是Angular和编写服务的新手,我将用它来添加新地址(发布到REST API)。

ComboBox1方法调用返回服务器上新创建的地址对象。

我想将其推入商店中现有的地址数组。我正在尝试做类似的事情:

saveAddress

我该如何正确地做到这一点?

1 个答案:

答案 0 :(得分:1)

除了Store之外,你绝不能改变reducer(州)以外的任何地方。 Reducer接收带有其有效负载(ADD_ADDRESS_SUCCESS)的操作({address: {...}}),然后使用该信息更新Store:

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
  }
} 

请注意,我们总是制作状态的副本,不要改变它。 要真正理解它,请阅读documentation @ angular-redux / store。

对于API调用,您应该使用Epics:将Epic视为管道,在处理副作用时将操作转换为一个或多个其他操作。在您的情况下,epic会对ADD_ADDRESS_REQUEST作出反应,与有效负载进行API调用,然后根据API调用的结果将操作转换为ADD_ADDRESS_SUCCESSADD_ADDRESS_ERROR。它永远不会更新状态本身,而是将其委托给分别处理ADD_ADDRESS_SUCCESSADD_ADDRESS_ERROR的reducer。

在相应的@angular-redux/store docs中了解有关史诗的更多信息。