【问题标题】:immutable reducer in reduxredux 中的不可变减速器
【发布时间】:2017-07-30 09:40:13
【问题描述】:

这个减速器看起来不错吗?为什么作者使用let users;,这对我来说看起来没有必要。这不会导致 FETCH_USER_FULLFILLED 情况下有 2 个用户吗?

const initalState = {
  users: [],
  loading: false,
  error: null,
};

// REDCUER
function usersReducer(state = initalState, action) {
  let users;
  switch (action.type) {
    case 'FETCH_USER_PENDING':
      return { ...state, loading: true };
    case 'FETCH_USER_FULFILLED':
      users = action.payload.data.results;
      return { ...state, loading: false, users };
    case 'FETCH_USER_REJECTED':
      return { ...state, loading: false, error: `${action.payload.message}` };
    default:
      return state;
  }
}

export default usersReducer;

【问题讨论】:

  • users 是不必要的,我认为使用模板文字 error: `${action.payload.message}`

标签: javascript reactjs ecmascript-6 redux


【解决方案1】:

reducer 没问题,不会造成FETCH_USER_FULLFILLED 有两个用户。但是,您是对的,不需要let users;。所以代码看起来像

case 'FETCH_USER_FULFILLED':
  return { ...state, loading: false, users: action.payload.data.results };

当 reducer 第一次执行时,它将从 initalState 获取它的启动状态,因为如果没有传递参数,它是默认值。所以users一开始是空数组,会在FETCH_USER_FULLFILLED动作上填充

编辑 users 添加以利用 ES6 中的属性 value shorthand 功能

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多