返回
用14行代码来学习路由的基本原理
前端
2023-12-07 05:57:43
import {useLocation, useNavigate} from "react-router-dom";
const Route = ({path, children}) => {
let location = useLocation();
let navigate = useNavigate();
return (
<>
{location.pathname === path && children}
<a onClick={() => navigate(path)}>切换到 {path}</a>
</>
);
};
export default Route;
// 初始化导航和内容区域
function init() {
const nav = document.getElementById('nav');
const content = document.getElementById('content');
const routes = [
{path: '/', content: '主页'},
{path: '/about', content: '关于我们'},
{path: '/contact', content: '联系我们'},
];
// 添加切换导航的监听器
nav.addEventListener('click', e => {
const link = e.target.closest('a');
if (link) {
// 获取链接的路径,并通过路由切换到该路径
const path = link.getAttribute('href').replace(/#.*/, '');
navigate(path);
}
});
// 将路径和内容的映射关系添加到路由
routes.forEach(route => {
route.element = document.createElement('div');
route.element.textContent = route.content;
content.appendChild(route.element);
});
// 监听URL变化,并根据当前URL显示相应的内容
addEventListener('hashchange', () => {
const path = window.location.hash.replace(/#.*/, '');
const route = routes.find(route => route.path === path);
if (route) {
// 隐藏所有内容
for (const r of routes) {
r.element.classList.add('hidden');
}
// 显示当前内容
route.element.classList.remove('hidden');
}
});
// 初始显示第一个路由的内容
const firstRoute = routes[0];
firstRoute.element.classList.remove('hidden');
}
// 加载HTML后初始化路由
window.addEventListener('load', init);
14行代码创建一个极简的单页路由
在如今的前端开发中,单页应用已经成为一种主流的开发模式。相比于传统的刷新页面加载新内容的模式,单页应用具有更好的用户体验。
单页应用的核心组件之一就是路由。路由可以理解为一种在不同页面之间进行切换的机制,而在React中,我们可以使用react-router-dom库来实现路由功能。
下面,我们就来使用react-router-dom库来创建一个小型的路由,它的代码长度只有14行。
import {BrowserRouter as Router, Route, Link} from "react-router-dom";
const App = () => (
<Router>
<div>
<ul>
<li><Link to="/">主页</Link></li>
<li><Link to="/about">关于我们</Link></li>
<li><Link to="/contact">联系我们</Link></li>
</ul>
<Route path="/" exact component={Home}/>
<Route path="/about" component={About}/>
<Route path="/contact" component={Contact}/>
</div>
</Router>
);
const Home = () => <h1>主页</h1>;
const About = () => <h1>关于我们</h1>;
const Contact = () => <h1>联系我们</h1>;
export default App;
在上面的代码中,我们首先使用BrowserRouter作为路由的容器,然后在其中定义了三个Route组件,分别对应于三个不同的页面:主页、关于我们和联系我们。
当用户点击导航栏中的链接时,对应的Route组件就会被激活,并显示相应的页面内容。
这就是使用react-router-dom库来创建单页路由的基本原理。
当然,在实际的开发中,我们还需要对路由进行更复杂的配置,比如添加嵌套路由、动态路由等等。
不过,这些都是基于基本原理的扩展,只要理解了基本原理,就可以轻松应对各种复杂的情况。
希望本文对你有帮助。