我需要管理一些反应用户权限状态数据。我希望能够通过动态函数根据对象的属性更改对象权限。我不知道如何针对特定的嵌套特权属性来更改值。这可能吗?
问题:如何将嵌套特权属性的值更改为函数类型和值参数?
下面是一个例子:
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
,并在比较用户_id
的if
条件内执行newPrivilages[type] = value; // update type with new value
。