我的问题涉及redux,更具体地说,涉及如何处理reducer函数中的错误/失败。我参考了ngrx示例应用程序(https://jsfiddle.net/wizviper/mq0qwnvr/)及其处理错误/失败的方式。
这是我所指的reducer函数:
export function reducer(state = initialState, action: collection.Actions): State {
switch (action.type) {
case collection.ActionTypes.LOAD: {
return Object.assign({}, state, {
loading: true
});
}
case collection.ActionTypes.LOAD_SUCCESS: {
const books = action.payload;
return {
loaded: true,
loading: false,
ids: books.map(book => book.id)
};
}
case collection.ActionTypes.ADD_BOOK_SUCCESS:
case collection.ActionTypes.REMOVE_BOOK_FAIL: {
const book = action.payload;
if (state.ids.indexOf(book.id) > -1) {
return state;
}
return Object.assign({}, state, {
ids: [ ...state.ids, book.id ]
});
}
case collection.ActionTypes.REMOVE_BOOK_SUCCESS:
case collection.ActionTypes.ADD_BOOK_FAIL: {
const book = action.payload;
return Object.assign({}, state, {
ids: state.ids.filter(id => id !== book.id)
});
}
default: {
return state;
}
}
}
有人可以解释在reducer函数中处理这两个动作的必要性:
REMOVE_BOOK_FAIL
ADD_BOOK_FAIL
例如,为什么要从状态中移除该书(在ADD_BOOK_FAIL
操作的情况下)?
如果添加图书操作失败,则商店中不存在该图书。是吗?
答案 0 :(得分:1)
也许它使用的命名使它成为一个红色的鲱鱼,我的猜测是ADD_BOOK_FAIL可以在其他地方使用,作为一个不同的用例作为后退机制。
我同意你的描述方式,因为这个原因开发人员没有这个意义。