如何根据 ID 在我的 reducer 中添加数据
How to add data in my reducer based on ID
我正在使用 ReactJS 和 Redux,我想将我的数据添加到我的 reducer 中,但是以这种方式:
当我收到我的 action.payload 时:它包含 ID 和数据 属性,目标是创建(如果不存在)具有 ID 值的 属性 并将数据放入 属性进入.
示例:
当有效负载为 {111, {name: 'test',age : 25}} 时,它应该在我的减速器中创建(如果不存在)一个 属性 ,如下所示:
MyReducer : {
clientData : {
111 : {name : 'test', age : 25}
}
}
如果我想添加另一个负载:{2222, {name :'toto' : age : 30}} 结果应该是这样的:
MyReducer : {
clientData : {
111 : {name : 'test', age : 25},
2222 : {name : 'toto', age : 30}
}
}
如果 id 存在于我的 reducer 中,它应该用新的 action.payload.data 值替换数据。
我已经试过了:
case 'ADD_CLIENT_DATA_SUCCESS':
const { id, record } = action.payload;
console.log(action.payload);
return {
...state,
loading: false,
clientData: {
...state.clientData,
id: record,
},
};
但是把id作为静态变量,结果是这样的:
知道如何实现吗?
谢谢
编辑:我已经编辑了我的代码,但是对于输入的新数据,它没有呈现为对象数组..
这是我的代码:
case 'ADD_CLIENT_DATA_SUCCESS':
const { id, record } = action.payload;
console.log(state.clientData[id]);
return {
...state,
loading: false,
clientData: {
...state.clientData,
[id]: [state?.clientData[id] || null, record],
},
};
将 NEWDATA 添加到我的减速器中的现有 ID 时的预期结果::
MyReducer : {
clientData : {
111 : {name : 'test', age : 25},
2222 : [{name : 'toto', age : 30}, {name : 'NEWDATA', age : 40}]
}
}
将 id 放入 [] 以使用动态变量而不是字符串 id :
...state,
loading: false,
clientData: {
...state.clientData,
[id]: record,
},
};
您需要使用 id
变量作为键,因此您需要用 []
包装它
case 'ADD_CLIENT_DATA_SUCCESS':
const { id, record } = action.payload;
console.log(action.payload);
return {
...state,
loading: false,
clientData: {
...state.clientData,
[id]: record,
},
};
阅读Computed property names了解更多信息
我正在使用 ReactJS 和 Redux,我想将我的数据添加到我的 reducer 中,但是以这种方式: 当我收到我的 action.payload 时:它包含 ID 和数据 属性,目标是创建(如果不存在)具有 ID 值的 属性 并将数据放入 属性进入.
示例: 当有效负载为 {111, {name: 'test',age : 25}} 时,它应该在我的减速器中创建(如果不存在)一个 属性 ,如下所示:
MyReducer : {
clientData : {
111 : {name : 'test', age : 25}
}
}
如果我想添加另一个负载:{2222, {name :'toto' : age : 30}} 结果应该是这样的:
MyReducer : {
clientData : {
111 : {name : 'test', age : 25},
2222 : {name : 'toto', age : 30}
}
}
如果 id 存在于我的 reducer 中,它应该用新的 action.payload.data 值替换数据。
我已经试过了:
case 'ADD_CLIENT_DATA_SUCCESS':
const { id, record } = action.payload;
console.log(action.payload);
return {
...state,
loading: false,
clientData: {
...state.clientData,
id: record,
},
};
但是把id作为静态变量,结果是这样的:
知道如何实现吗? 谢谢
编辑:我已经编辑了我的代码,但是对于输入的新数据,它没有呈现为对象数组.. 这是我的代码:
case 'ADD_CLIENT_DATA_SUCCESS':
const { id, record } = action.payload;
console.log(state.clientData[id]);
return {
...state,
loading: false,
clientData: {
...state.clientData,
[id]: [state?.clientData[id] || null, record],
},
};
将 NEWDATA 添加到我的减速器中的现有 ID 时的预期结果::
MyReducer : {
clientData : {
111 : {name : 'test', age : 25},
2222 : [{name : 'toto', age : 30}, {name : 'NEWDATA', age : 40}]
}
}
将 id 放入 [] 以使用动态变量而不是字符串 id :
...state,
loading: false,
clientData: {
...state.clientData,
[id]: record,
},
};
您需要使用 id
变量作为键,因此您需要用 []
case 'ADD_CLIENT_DATA_SUCCESS':
const { id, record } = action.payload;
console.log(action.payload);
return {
...state,
loading: false,
clientData: {
...state.clientData,
[id]: record,
},
};
阅读Computed property names了解更多信息