【发布时间】:2019-12-22 05:08:46
【问题描述】:
我在成功登录后尝试管理会话,同时重定向到表单提交时的某个页面。
我通常会在类组件中这样做:
componentDidMount() {
if (context.token) {
return <Redirect to="/" />
}
}
但是我想使用 React 钩子,因此;以下代码不会重定向到任何地方:
import React, { useEffect } from "react";
import ReactDOM from "react-dom";
import { BrowserRouter, Switch, Route, Redirect, Link } from "react-router-dom";
es6
const HomePage = props => (
<div>
<h1>Home</h1>
</div>
);
const AboutUsPage = props => {
useEffect(() => {
redirectTo();
}, []);
return (
<div>
<h1>About us</h1>
</div>
);
};
function redirectTo() {
return <Redirect to="/" />;
}
function App() {
return (
<div className="App">
<BrowserRouter>
<nav>
<Link to="/">Home</Link>
<Link to="/us">About us</Link>
</nav>
<Switch>
<Route exact path="/" component={HomePage} />
<Route exact path="/us" component={AboutUsPage} />
</Switch>
</BrowserRouter>
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
工作沙盒:https://codesandbox.io/s/blue-river-6dvyv?fontsize=14
我已经读到如果钩子useEffect() 返回一个函数,它只会在组件卸载时起作用。但它应该在组件被挂载时重定向。
有什么建议吗?提前致谢。
【问题讨论】:
标签: javascript reactjs ecmascript-6 react-router react-hooks