2 回答

TA貢獻1825條經驗 獲得超6個贊
你可以試試這個:
updateRoleTypes = () => {
this.setState(prevState => {
const names = prevState.roles.map(role => role.role_type.display.toLowerCase())
const updated = APIresponse.filter(r => names.includes(r.display.toLowerCase()))
return {
roles: [
...prevState.roles.filter(row => !APIresponse.find(responseRow => responseRow.display.toLowerCase() === row.role_type.display.toLowerCase())),
...updated,
],
}
})
}

TA貢獻1805條經驗 獲得超9個贊
您可以修改state? 如果是這種情況,您可以將 的數據類型修改roles為一個object of objects(這可以使用code角色的作為對象的鍵),而不是一個array of objects。這將幫助您訪問和檢查每個角色的特定key。
這樣,您應該能夠只運行一個循環來檢查您是否role存在新的循環,state如果是則更新它。
代碼
const state = {
roles: {
"MANG": { role_type: { display: "Manager" } },
"ACCT": { role_type: { display: "Accounting" } },
"DEV": { role_type: { display: "Developer" } }
}
};
const response = [
{
uuid: "a49-a2a5-fcce",
link: "organizations/roletypes/a49-a2a5-fcce/",
code: "MANG",
display: "MANAGER",
description: "MANAGER"
},
{
uuid: "681fbe",
link: "organizations/roletypes/681fbe/",
code: "SUPSPEC",
display: "Support Specialist",
description: "Support Specialist"
},
{
uuid: "0331ddccf",
link: "organizations/roletypes/0331ddccf/",
code: "PROJMANG",
display: "Project Manager",
description: "Project Manager"
}
];
const updateRoleTypes = newRoles => {
let _roles = state.roles;
newRoles.forEach(nR => {
if (_roles[nR.code]) {
_roles[nR.code].role_type = nR;
}
});
return _roles;
};
這將返回您的突變,state您只需要setState使用新值即可。
添加回答
舉報