React + Redux:这是为不断增长的数组实现reducer的正确方法

时间:2016-09-27 06:47:57

标签: javascript reactjs react-native redux react-redux

我有两个输入,一个用于名字,第二个用于姓氏。并像这样更新:

名字和姓氏的动作创建者:

export const updateFirstName = (text) => {
  return {
    type: 'UPDATE_FIRST_NAME',
    firstName: text,
  }
}

export const updateLastName = (text) => {
  return {
    type: 'UPDATE_LAST_NAME',
    lastName: text,
  }
}

还有一个额外的输入可以向classNumber数组添加类信息对象:classNameclasses,这里是它的动作创建者:

// class是一个像{classNumber:1234,className:'science'}这样的对象并传递给action creator:

export const addClass = (class) => {
  return {
    type: 'ADD_CLASS',
    class: class,
  }
}

还有三个动作创建者的缩减器:

const DEFAULT_STATE = {
  classes: [],
}

export default function(state = DEFAULT_STATE, action) {
  switch(action.type) {
    case 'UPDATE_FIRST_NAME':
      return {
        ...state,
        firstName: action.firstName
      }

    case 'UPDATE_LAST_NAME':
      return {
        ...state,
        lastName: action.lastName
      }

    case actionTypes.ADD_CLASS:
      return {
        ...state,
        classes: [action.class, ...state.classes]
      }

    default:
      return state
  }
}

Redux工作正常,并且class数组中添加了一个新的classes,但我想知道我是否正确并且正确地遵循了redux练习,比如将新对象添加到现有的数组和更新状态树,并按预期更新状态?

最后,动作创作者应该与减速器完全比较?我应该直接将属性classNameclassNumber传递给动作创建者,并在动作创建者中形成对象,甚至可以在减速器内形成对象,如:

case actionTypes.ADD_CLASS:
      return {
        ...state,
        classes: [{
           className: action.className,
           classNumber: action.classNumber,
        }, ...state.classes]
}, 

而不是先提前形成一个对象class并将其传递给动作创建者?

谢谢

0 个答案:

没有答案