【问题标题】:reduce redux-thunk boilersplate code减少 redux-thunk 样板代码
【发布时间】:2018-06-23 02:44:19
【问题描述】:

我正在使用 redux-thunk 中间件,它可以很好地处理异步操作,但是我有太多样板要编写,我该如何减少它?

export function userReducer(state = {
  signup_loading: false,
  signup_failed: '',
  signup_error: '',
  login_loading: false,
  login_failed: '',
  login_error: ''
}, { payload, payload: { data, error } }) {
  switch (action.type) {
    case SIGNUP_REQUEST:
      return {
        signup_loading: true
      }
    case SIGNUP_SUCCESS:
      return {
        signup_loading: false,
        data
      }
    case SIGNUP_FAILED:
      return {
        signup_loading: false,
        signup_error: error
      }
    case LOGIN_REQUEST:
      return {
        login_loading: true
      }
    case LOGIN_SUCESS:
      return {
        login_loading: false,
        data
      }
    case LOGIN_FAILED:
      return {
        login_loading: false,
        login_error: error
      }
    default: return state
  }
}

对于整个应用程序中的每个 http 调用,我都想做类似的事情:

  • 在请求之前我想为每个 http 调用显示加载器
  • 完成后隐藏加载器
  • 如果错误停止加载程序并显示错误消息

我不想在所有 reducer 中复制粘贴上面的代码

【问题讨论】:

    标签: javascript reactjs redux redux-thunk


    【解决方案1】:

    您可以保留单独的操作,例如 SHOW_LOADER、HIDE_LOADER 来处理加载程序。当您进行 Web api 调用或 api 调用返回时,可以调度这些操作。可以从应用程序中的任何位置分派这些操作以处理加载程序状态。您只需要在一个可以从任何地方调用的 reducer 中编写它。

    【讨论】:

    • 你如何为那些加载器做命名空间?每个动作的显示加载器都不起作用,因为在一个页面中你可能有多个 http 调用,例如。你加载提要、加载通知、加载 cmets..
    • 它们是独立的还是同一个装载机?如果他们要处理相同的加载器图标,您可以保留一个计数器,在调用 api 时递增计数器并在返回时递减,现在如果计数器为 0,您可以隐藏加载器
    • 我可以使用上面的一个加载,但它不会工作,如果你有 2 个页面,一个用于注册,一个用于登录,你不能使用一个加载状态。为什么?因为你可能正在四处导航,如果你使用一种加载状态可能会发生冲突,这就是为什么我将它们分成 signup_loading、login_loading 等
    猜你喜欢
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多