reactjs - React 路由器 - 私有路由
问题描述
function App() {
const view = useSelector(viewsSelector);
const isAuth = () => {
if(view === ''){
return false;
}
if(view === 'welcome'){
return true;
}
}
console.log(isAuth());
const PrivateRoute = ({component: Component, ...rest}) => {
return(
<Route {...rest} render={(props) => (
isAuth()
? <Component {...props}/>
: <Redirect to='/Login'/>
)}/>
)
}
return(
<Router>
<Header/>
<Switch>
<Route exact path='/Login' component={Login}/>
<Route path='/About' component={About}/>
<Route path='/Contact' component={Contact}/>
<Route path='/Help' component={Help}/>
<PrivateRoute path='/Welcome' component={Welcome}/>
</Switch>
</Router>
)
}
我正在使用私人或受保护的路线。
isAuth()
工作时false
你不能去任何地方,除了Login
但从toisAuth()
更改,它不会将路由重定向到false
true
path='./Welcome
更改时如何重定向它isAuth()
?
解决方案
您需要将isAuth
结果传递给PrivateRoute
,否则它将不知道何时isAuth
更改。
function App() {
const view = useSelector(viewsSelector);
const isAuth = () => {
if (view === "") {
return false;
}
if (view === "welcome") {
return true;
}
};
console.log(isAuth());
const PrivateRoute = ({ component: Component, canView, ...rest }) => {
return (
<Route
{...rest}
render={(props) =>
canView ? <Component {...props} /> : <Redirect to="/Login" />
}
/>
);
};
return (
<Router>
<Header />
<Switch>
<Route exact path="/Login" component={Login} />
<Route path="/About" component={About} />
<Route path="/Contact" component={Contact} />
<Route path="/Help" component={Help} />
<PrivateRoute path="/Welcome" component={Welcome} canView={isAuth()} />
</Switch>
</Router>
);
}
推荐阅读
- spring-integration - 如何在运行时注册集成流?
- python - 在一个数据中设置两个参数
- azure - 使用 azure maps 模糊搜索返回重复结果
- java - 检查 IF 条件然后将其绕过到 ELSE
- apache-spark - 如何使用带 spark 的 JDBC 驱动程序读取 Druid 数据?
- node.js - 将 .zip 文件从服务发送到 nodejs 应用程序,然后再发送到浏览器
- django - 如何在 django restframework 中过滤多对多字段值
- java - 与@DataJpaTest 和 h2 数据库保持多对多关系不起作用
- sql - 在 MS Access 中使用 CCur() 时如何处理错误“#Error”
- python - 即使我的格式正确,Tkinter 按钮也没有运行该功能