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