Reactjs Redux状态管理

Reactjs Redux状态管理,reactjs,redux,database-normalization,Reactjs,Redux,Database Normalization,我正在使用React和Redux制作我的第一个应用程序。我的州将需要存储一些有作者和标题的列表,在每个列表上,我将存储10个项目(URL、描述等)。我正在努力寻找一种好的方法来保持我的状态有条理,以便易于管理和扩展。经过一些研究,我决定使用ID为的对象而不是数组。我的行动是这样的: const addList = ( { id, listAuthor = '', listTitle = '', } = {} ) => { return { typ

我正在使用React和Redux制作我的第一个应用程序。我的州将需要存储一些有作者和标题的列表,在每个列表上,我将存储10个项目(URL、描述等)。我正在努力寻找一种好的方法来保持我的状态有条理,以便易于管理和扩展。经过一些研究,我决定使用ID为的对象而不是数组。我的行动是这样的:

const addList = (
  {
    id,
    listAuthor = '',
    listTitle = '',
  } = {}
) => {
  return {
    type: 'ADD_LIST',
    id: uuid(),
    list: {
      listAuthor,
      listTitle,
    }
  }
};

const addTrack = (
  {
    id,
    url = '',
    trackInfo = '',
    description = '',
  } = {}
) => ({
  type: 'ADD_TRACK',
  track: {
    id: uuid(),
    url,
    trackInfo,
    description
  }
});
我的添加列表减缩器如下所示

export default (state = listReducerDefaultState, action) => {
  switch (action.type) {
    case 'ADD_LIST':
      return {
        listIdArray: [...state.listIdArray, action.id],
        listById: {
          ...state.listById,
          [action.id]: action.list,
        }
      };

编写ADD_TRACK reducer的最佳方法是什么,这样每个曲目都有列表的Id?这种方法正确吗?还是应该使用添加列表操作添加曲目?

您需要将listId字段添加到添加曲目操作,并将其作为其他道具进行路径设置

const addTrack = ({id,url = '',trackInfo = '', listId='',description = '',} = {}) => ({
  type: 'ADD_TRACK',
  track: {
    id: uuid(),
    listId,
    url,
    trackInfo,
    description
  }
});


addTrackReducer (state = {}, action) => {
  switch (action.type) {
    case 'ADD_TRACK':
      return action.track
  };

关于你的第二个问题:是的,这是正确的。您最好像Redux指南中所说的那样使用声明性操作。AddTrack必须有自己的名为ADD_TRACK的操作或任何方便您的方式

我不应该尝试从reducer中处理listId吗?我正在尝试这样做:
案例'ADD_TRACK':返回{……state,tracksById:{……state.tracksById,[state.listidaray[index]]:action.TRACK}
,但这似乎在改变我的状态,知道我做错了什么吗?你能给我看一下你应用程序的json数据结构示例吗?我修复了我的ADD_TRACK reducer,问题出在action.id中,我现在声明它并在返回操作之前为它赋值。将id作为listId从addList reducer传递到addTrack reducer的最佳方式是什么?