如何使用Redux还原程序和服务器API

如何使用Redux还原程序和服务器API,redux,redux-thunk,Redux,Redux Thunk,在redux操作中使用手动过滤创建还原剂的更好方法是什么: 1.为每个CRUD操作(如添加数据、删除数据)创建还原器并将其组合。在这种情况下如何设置initialState? 2.在一个缩减器中设置操作(例如fetchDeleteDataRequest、fetchDeleteDataSuccess、fetchAddDataRequest、fetchAddDataSuccess)?您可以使用sperate缩减器和/或通用缩减器来添加或删除由您决定的数据。如果您正在考虑对添加和删除执行单独的操作,则

在redux操作中使用手动过滤创建还原剂的更好方法是什么: 1.为每个CRUD操作(如添加数据、删除数据)创建还原器并将其组合。在这种情况下如何设置initialState?
2.在一个缩减器中设置操作(例如fetchDeleteDataRequest、fetchDeleteDataSuccess、fetchAddDataRequest、fetchAddDataSuccess)?

您可以使用sperate缩减器和/或通用缩减器来添加或删除由您决定的数据。如果您正在考虑对添加删除执行单独的操作,则需要保持数据的一致性。但是,拥有一个处理CRUD操作的通用函数是理想的,因为这将减少您必须使用的代码量,但您也需要一种方法来区分它们(可能绕过一些变量添加删除)。让我们考虑并列出您将添加或删除的项目。此列表可以是开头的空数组(initialState),并将其作为道具传递给组件

行动

export const addDeleteItem = data => dispatch => {
  // you can perform REST calls here
  dispatch({
    type: ADD_REMOVE_DATA,
    payload: data
  });
};
let initialState = {
 items:[]
}

export default (state = initialState, action) => {
  switch (action.type) {
    case ADD_REMOVE_DATA:
      if(action.payload.event === 'ADD'){
        return {...state,items:[...state.items,action.payload.item]}
      }else if(action.payload.event === 'DELETE'){
        return {...state,items:state.items.filter(item=>item.id !== action.payload.item.id)}
      }else if (action.payload.event === 'UPDATE'){
       //handle your update code
      }
  }
}
减速器

export const addDeleteItem = data => dispatch => {
  // you can perform REST calls here
  dispatch({
    type: ADD_REMOVE_DATA,
    payload: data
  });
};
let initialState = {
 items:[]
}

export default (state = initialState, action) => {
  switch (action.type) {
    case ADD_REMOVE_DATA:
      if(action.payload.event === 'ADD'){
        return {...state,items:[...state.items,action.payload.item]}
      }else if(action.payload.event === 'DELETE'){
        return {...state,items:state.items.filter(item=>item.id !== action.payload.item.id)}
      }else if (action.payload.event === 'UPDATE'){
       //handle your update code
      }
  }
}

这只是一个示例,您可以按照这样的方法避免代码重复。

如果我有3个操作只用于创建操作(fetchRequest、fetchSuccess、Failure),如何将其分离到不同的还原器中并像一个一样保存数据状态?如果一个减速机不做,我将得到12个动作<代码>[FetchDeleteDataSucces](状态,{payload}){返回{…状态,数据:state.data.filter(item=>!payload.includes(item.u id)),isFetching:false,错误:null,};},