React动态权限控制失效,组件没按角色切换显示
我在做用户角色切换时动态控制按钮权限,根据用户权限数组渲染组件。但切换角色后按钮没变化,哪里出问题了?
比如当前用useState存用户权限,用includes判断是否显示:
function AdminButton({ permissions }) {
return (
{permissions.includes('admin') && (
<button>删除数据</button>
)}
)
}
在父组件用useEffect监听权限变化:
const [userRole, setRole] = useState('guest');
useEffect(() => {
if (userRole === 'admin') {
// 更新权限数组
}
}, [userRole]);
但实际测试时,切换userRole为admin后按钮仍然不显示。控制台没报错,权限数组确实在变化,是什么原因导致组件没重新渲染?
permissions没有触发更新。你用useState存角色名,但权限数组可能没跟着变——useEffect里只改了角色,没更新权限数组本身,组件依赖的permissions根本没变,React 当然不重渲染。你得让
permissions也变成 state,并在角色切换时同步更新它。比如:然后组件里直接用
permissions:或者更偷懒点,别传
permissions,直接在父组件里用userRole判断:代码放这了,你对比下自己原来的,大概率是
permissions没随userRole变,导致组件没收到新 props。改成这样: