本文小编为大家详细介绍“react路由权限动态菜单如何配置”,内容详细,步骤清晰,细节处理妥当,希望这篇“react路由权限动态菜单如何配置”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
import { AuthRouterObject } from "react-router-auth-plus";
const routers: AuthRouterObject[] = [
{ path: "/", element: <Navigate to="/home" replace /> },
{ path: "/login", element: <Login /> },
{
element: <Layout />,
children: [
{ path: "/home", element: <Home />, auth: ["admin"] },
{ path: "/setting", element: <Setting /> },
{
path: "/application",
element: <Application />,
auth: ["application"],
},
],
},
{ path: "*", element: <NotFound /> },
];
这里我使用 swr 来模拟获取当前用户的权限,两秒后返回。
// App.tsx
import { useAuthRouters } from "react-router-auth-plus";
const fetcher = async (url: string): Promise<string[]> =>
await new Promise((resolve) => {
setTimeout(() => {
resolve(["admin"]);
}, 2000);
});
function App() {
const { data: auth, isValidating } = useSWR("/api/user", fetcher, {
revalidateOnFocus: false,
});
return useAuthRouters({
// 当前用户的权限,string[]
auth: auth || [],
routers,
// 跳转到没权限的路由时,用户自定义显示。这里我显示 403 页面。
noAuthElement: (router) => <NotAuth />,
// 用户权限还没请求到时,渲染 loading
render: (element) => (isValidating ? element : <Loading />),
});
}
或你可以使用 jsx 的方式来配置
import { AuthRoute, createAuthRoutesFromChildren } from "react-router-auth-plus";
useAuthRouters({
auth: auth || [],
noAuthElement: (router) => <NotAuth />,
render: (element) => (isValidating ? element : <Loading />),
routers: createAuthRoutesFromChildren(
<Routes>
<AuthRoute path="/" element={<Navigate to="/home" replace />} />
<AuthRoute path="/login" element={<Login />} />
<AuthRoute element={<Layout />}>
<AuthRoute path="/home" element={<Home />} auth={["admin"]} />
<AuthRoute path="/setting" element={<Setting />} />
<AuthRoute
path="/application"
element={<Application />}
auth={["application"]}
/>
</AuthRoute>
<AuthRoute path="*" element={<NotFound />} />
</Routes>
),
});
若当前 home 的权限被设置为 ["auth2", "auth3", "auth4"]
,当前用户的权限只要满足一个就会判断为拥有此路由的权限。
react-router-auth-plus
会自动将 children 传给 Layout,你不必在路由配置里传给 Layout。如果你是 ts,将 routers 类型设置为可选即可。
useAuthMenus
会过滤掉没有权限的路由,接下来你可以自行处理一下成你想要的数据再渲染成 antd 的 Menu 组件。
import { useAuthMenus, AuthRouterObject } from "react-router-auth-plus";
interface LayoutProps {
routers?: AuthRouterObject;
}
const Layout:FC<LayoutProps> = ({ routers }) => {
const menus = useAuthMenus(routers);
...
}
读到这里,这篇“react路由权限动态菜单如何配置”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。