【发布时间】:2021-01-31 08:34:01
【问题描述】:
我想根据用户角色在同一个 React 路由上设置不同的组件。
这就是我所做的。
// AppRouter.js
const AppRouter = () => {
const {loading, data, error} = useQuery(GET_CURRENT_USER)
if (loading) return <span>Loading...</span>
if (error) return <Redirect to="/login"/>
if (data) {
let {me: {role}}= data
if (role === 'user') {
return (
<Switch>
<Route to="/" component={EmployeeHome}/>
<Route path="/login" exact component={SigninForm} />
</Switch>
)
} else {
return (
<Switch>
<Route to="/" component={AdminHome}/>
<Route path="/login" exact component={SigninForm} />
</Switch>
)
}
}
}
// App.js
<Router history={history}>
<div className="App">
<header>
<h3>This is header!</h3>
</header>
<Switch>
<AppRouter />
<Route path="/login" component={SigninForm} />
</Switch>
</div>
</Router>
- 调用 graphql 查询,根据存储在 localStorage 中的授权令牌检索当前用户。
- 如果出错,将重定向到 /login
- 如果成功,将创建可用于该特定角色的特定路由。 3a。如果角色是用户,它将创建一个具有 EmployeeHome 组件的路由 3b。如果角色是管理员,它将创建一个具有 AdminHome 组件的路由
尝试上面的代码后,它没有加载指向/login路由的SigninForm。
应该做些什么来完成这项工作?
【问题讨论】:
标签: reactjs react-router