reactjs - ReactJS 仅重定向第一次
问题描述
下面的代码以 5 秒后页面从主页切换到关于的方式工作。但之后就不可能回家了。我希望它只在第一次重定向到 About,并且能够返回 Home 而不会再次被重定向。你能给我一些建议吗?
应用程序.js
import { HashRouter as Router } from 'react-router-dom';
import Navigation from './Navigation';
import Page from './Page';
import '../styles/app.css';
function App() {
return (
<div className="App">
<Router>
<Navigation />
<Page />
</Router>
</div>
);
}
export default App;
页面.js
import React, { useState, useRef, useEffect } from 'react';
import { Route, Switch, Redirect } from 'react-router-dom';
import Home from './pages/Home';
import About from './pages/About';
import Contact from './pages/Contact';
import ProjectsList from './pages/ProjectsList';
import ErrorPage from './pages/ErrorPage';
import '../styles/page.css';
const Page = () => {
const [redirect, setRedirect] = useState(false);
let interval = useRef();
const redirectCountdown = () => {
if (!redirect) {
let time = 0;
interval = setInterval(() => {
time++;
if (time > 5) {
setRedirect(true);
clearInterval(interval.current);
}
}, 1000);
}
};
useEffect(() => {
redirectCountdown();
return () => {
clearInterval(interval.current);
};
});
return (
<main>
<Switch>
{redirect ? (
<Route path="/" exact component={Home}>
<Redirect to="/about" />
</Route>
) : (
<Route path="/" exact component={Home} />
)}
<Route path="/about" component={About} />
<Route path="/contact" component={Contact} />
<Route path="/projects" component={ProjectsList} />
<Route component={ErrorPage} />
</Switch>
</main>
);
};
export default Page;
解决方案
实现此目的的一种方法是切换到使用history.push
and setTimeout
:
import { useEffect } from 'react';
import { Route, Switch } from 'react-router-dom';
import { useHistory } from 'react-router';
import Home from './pages/Home';
import About from './pages/About';
import Contact from './pages/Contact';
import ProjectsList from './pages/ProjectsList';
import ErrorPage from './pages/ErrorPage';
import '../styles/page.css';
const Page = () => {
const history = useHistory();
useEffect(() => {
const timeoutId = setTimeout(() => {
history.push('/about');
}, 5000);
return () => clearTimeout(timeoutId);
}, [history]);
return (
<main>
<Switch>
<Route path="/" exact component={Home} />
<Route path="/about" component={About} />
<Route path="/contact" component={Contact} />
<Route path="/projects" component={ProjectsList} />
<Route component={ErrorPage} />
</Switch>
</main>
);
};
export default Page;
推荐阅读
- python - 散景散点图:是否可以覆盖按类别着色的线?
- cmake - 在 RHEL 7 上安装 cmake 3.12 版本
- javascript - 通过javascript使用GenerateQuoteFromOpportunity在CRM中创建报价时出现异常
- arrays - 如何将对象数组保存到 NSUserDefaults?
- docker - 如何删除泊坞窗图像?
- amazon-web-services - 使用“aws lambda 调用”时,在 localstack 上出现“无效的引用格式”错误
- javascript - 如何使用 JavaScript 找出 YouTube 的“自动字幕语言”?(获取自动字幕语言)
- karate - 空手道:替换文本类型中的变量
- postgresql - 仅将表导入 Dokku 中的 Postgres
- php - 如果文本与数组匹配,则获取 id