我是Angular和编写服务的新手,我将用它来添加新地址(发布到REST API)。
ComboBox1
方法调用返回服务器上新创建的地址对象。
我想将其推入商店中现有的地址数组。我正在尝试做类似的事情:
saveAddress
我该如何正确地做到这一点?
答案 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_SUCCESS
或ADD_ADDRESS_ERROR
。它永远不会更新状态本身,而是将其委托给分别处理ADD_ADDRESS_SUCCESS
和ADD_ADDRESS_ERROR
的reducer。
在相应的@angular-redux/store docs中了解有关史诗的更多信息。