Reactjs React Redux中的错误处理

Reactjs React Redux中的错误处理,reactjs,redux,Reactjs,Redux,我读过一些关于redux中错误的Qestion,但仍然不太理解它 例如,在我的应用程序中,我有activeUserreducer,其中我存储了null或object,并记录了用户。它侦听操作,并根据需要更改其状态。简单 但是错误缩减器应该如何工作和外观呢 我用这种方式减少了我的错误: 我有一个error/index.js文件,其中存储了所有错误减少器: import * as actionTypes from '../../constants' export const wrongUserna

我读过一些关于redux中错误的Qestion,但仍然不太理解它

例如,在我的应用程序中,我有
activeUser
reducer,其中我存储了
null
object
,并记录了用户。它侦听
操作
,并根据需要更改其状态。简单

但是
错误
缩减器应该如何工作和外观呢

我用这种方式减少了我的错误:

我有一个
error/index.js
文件,其中存储了所有错误减少器:

import * as actionTypes from '../../constants'

export const wrongUsername = (state = false, action) => {
  switch (action.type) {
    case actionTypes.WRONG_USERNAME:
      return state = true
    case actionTypes.RESET_ERRORS:
      return state = false
    default:
      return state
  }
}

export const wrongPassword = (state = false, action) => {
  switch (action.type) {
    case actionTypes.WRONG_PASSWORD:
      return state = true
    case actionTypes.RESET_ERRORS:
      return state = false
    default:
      return state
  }
}

export const usernameIsTaken = (state = false, action) => {
  switch (action.type) {
    case actionTypes.USERNAME_IS_TAKEN:
      return state = true
    case actionTypes.RESET_ERRORS:
      return state = false
    default:
      return state
  }
}
这是我的
还原程序/index.js
文件,当我合并所有
还原程序时:

const reducers = combineReducers({
  activeUser,
  viewableUser,
  isLoading,
  isFriend,
  userMessages,
  users,
  wasRequestSend,
  wrongUsername,
  wrongPassword,
  usernameIsTaken
})

这是否正常?我是否应该更改我的
错误减少器的结构?

您需要创建一些js文件,如下所示:

export default {
  loginFailed : 'Username or Password is wrong'
}
并在
存储
中生成状态消息,然后像这样将错误消息传递给
存储

import ErrorCost from './somerror.js'
export const wrongPassword = (state = false, action) => {
  switch (action.type) {
    case actionTypes.WRONG_PASSWORD:
      return {
         error : true,
         message : ErrorCost.loginFailed 
      }
    default:
      return state
  }
}

您需要创建一些js文件,如下所示:

export default {
  loginFailed : 'Username or Password is wrong'
}
并在
存储
中生成状态消息,然后像这样将错误消息传递给
存储

import ErrorCost from './somerror.js'
export const wrongPassword = (state = false, action) => {
  switch (action.type) {
    case actionTypes.WRONG_PASSWORD:
      return {
         error : true,
         message : ErrorCost.loginFailed 
      }
    default:
      return state
  }
}

状态可以是对象,所以在状态为对象的情况下,只能执行一个用户缩减器

减速器返回实体的新状态。所以你可以这样写:

export const wrongUsername = (state = false, action) => {
  switch (action.type) {
    case actionTypes.WRONG_USERNAME:
      return true
    case actionTypes.RESET_ERRORS:
      return false
    default:
      return state
  }
}
您不应该在reducer(或其他地方)中改变状态

所以,将状态作为对象,可以使用比使用逻辑更少的约简

例如:

const initialState = {
   currentUser: null,
   users: [],
   isLoading: false, // I assume it is for display a spinner
}

export default userReducer = (state = initialState, action) {
   switch(action.type) {
      case SET_CURRENT_USER:
         return {
            ...state,
            currentUser: action.currentUser,
         }
      case ADD_USER:
         return {
            ...state,
            users: [...state.users, action.user]
         }
      case SET_IS_LOADING:
         return {
            ...state,
            isLoading: action.isLoading
         }
      default:
         return state
   }

}
您的减速器应该表示一个实体。 因此,为了回答您的问题,有几种处理redux错误的方法。如果要在表单中显示错误,可以使用redux表单。否则,您可以将错误存储在对象状态中,并在需要时重置它


但最好的选择是使用一个向用户显示错误的模块。因此,当您捕获错误时,可以显示它。(react-redux-toastr,这很管用)。

状态可以是对象,因此在状态是对象的情况下,只能执行一个用户还原

减速器返回实体的新状态。所以你可以这样写:

export const wrongUsername = (state = false, action) => {
  switch (action.type) {
    case actionTypes.WRONG_USERNAME:
      return true
    case actionTypes.RESET_ERRORS:
      return false
    default:
      return state
  }
}
您不应该在reducer(或其他地方)中改变状态

所以,将状态作为对象,可以使用比使用逻辑更少的约简

例如:

const initialState = {
   currentUser: null,
   users: [],
   isLoading: false, // I assume it is for display a spinner
}

export default userReducer = (state = initialState, action) {
   switch(action.type) {
      case SET_CURRENT_USER:
         return {
            ...state,
            currentUser: action.currentUser,
         }
      case ADD_USER:
         return {
            ...state,
            users: [...state.users, action.user]
         }
      case SET_IS_LOADING:
         return {
            ...state,
            isLoading: action.isLoading
         }
      default:
         return state
   }

}
您的减速器应该表示一个实体。 因此,为了回答您的问题,有几种处理redux错误的方法。如果要在表单中显示错误,可以使用redux表单。否则,您可以将错误存储在对象状态中,并在需要时重置它


但最好的选择是使用一个向用户显示错误的模块。因此,当您捕获错误时,可以显示它。(react-redux-toastr,这很有效)。

您可以创建一个通用减缩器,用于状态为专用标志的错误处理。无需多个通用减缩器。您可以创建一个通用减缩器,用于状态为专用标志的错误处理。无需多个通用减缩器