用单个函数更改嵌套状态值?(javascript/Rect)



我需要管理一些反应用户权限状态数据。我希望能够通过动态函数根据对象的属性更改对象权限。我不知道如何针对特定的嵌套特权属性来更改值。这可能吗?

问题:如何将嵌套特权属性的值更改为函数类型和值参数?

下面是一个例子:

const [userPrivilages, setUserPrivilages] = useState([{
_id: "123"
privilages: {
edit: true, //before!
share: true,
del: false
}
},
{
...more users
}
])
//my attempt
const changePrivilage = (type, value) => {
const newPrivilages = userPrivilages.map(user => {
return {
...user,
privilages: {
...privilages,
//change the privilage of "type" from the functions parameter to the value parameter
}
}) setUserPrivilages(newPrivilages)
}
changePrivilage("edit", false)

期望输出:

const [userPrivilages, setUserPrivilages] = useState([{
_id: "123"
privilages: {
edit: false, //After!
share: true,
del: false
}
},
{
...more users
}
])

谢谢!

您可以使用[]将变量称为键,如下所示:

const changePrivilage = (type, value) => {
const newPrivilages = userPrivilages.map(user => {
return {
...user,
privilages: {
...user.privilages,
[type]: value // here it is !!!
}
}) setUserPrivilages(newPrivilages)
}

试试这个:(理解代码见注释(

const changePrivilage = (type,value) => {
const newUserPrivilages = userPrivilages.map(user => { 
let newPrivilages = user.privilages; // get old privilages of user
newPrivilages[type] = value; // update type with new value
return {
...user,
privilages: newPrivilages, // set privilages as newPrivilages
};
});
setUserPrivilages(newUserPrivilages);
};

注意:这将更改所有用户的属性。如果只想为特定用户更新,请将_id也传递给changePrivilage,并在比较用户_idif条件内执行newPrivilages[type] = value; // update type with new value

最新更新