一、React Router
React Router是React官方提供的路由库,可以让我们更好的管理web应用中的路由。React Router提供了3个核心组件:BrowserRouter, Switch和Route。 BrowserRouter是基于浏览器的history API实现的路由,在这个组件中定义了一个Router实例。 Switch是一个简单的容器,只渲染匹配到的第一个子元素。 Route是Route path 和 component之间的映射,当当前路由匹配到时,会将对应的组件渲染出来。 下面是一个使用React Route的示例:
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import Home from './components/Home';
import About from './components/About';
import NotFound from './components/NotFound';
ReactDOM.render(
,
document.getElementById('root')
);
上述代码中我们使用二、React Router教程简书
React Router教程简书提供了React Route的入门教程,从入门到项目实战逐步解释了React Route的使用方法。 教程中包含以下核心内容,即如何在React项目中使用React Router、React Route的核心概念、React Route的基本要素、嵌套路由以及React Route的高级用法等。 下面是一个基于React Router的小计数器应用:
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter as Router, Route, Link } from 'react-router-dom';
const Count = ({ match }) => (
当前计数:{match.params.count}
);
ReactDOM.render(
-
<Link to="/">Home
-
<Link to="/count/0">计数器
Welcome to Home
} />
,
document.getElementById('root')
);
上述代码中我们创建Count组件,应用React Router实现计数器小应用,用<Link>标签实现页面跳转。
三、React Router6
React Router6是React Router的下一代版本,是一个重大的更新。相对于React Router4和React Router5来说,React Router6更加灵活,同时保留了React Router4的优点。 React Router6包含以下核心概念:Routes, Route, Router, Link。下面是一个使用React Route6的示例:
import React, { useState } from 'react';
import ReactDOM from 'react-dom';
import { Routes, Route, Link } from 'react-router-dom';
const Home = () => Welcome to Home
;
const Count = () => {
const [count, setCount] = useState(0);
return (
当前计数:{count}
);
};
const App = () => (
-
<Link to="/">Home
-
<Link to="/count">计数器
} />
} />
);
ReactDOM.render(
, document.getElementById('root'));
上述代码中我们使用<Link>标签实现页面跳转,并且使用
四、React Route原理
React Route的原理是基于React的状态管理机制,实现动态渲染。React Router的核心在于
import React from 'react';
import ReactDOM from 'react-dom';
import { createBrowserHistory } from 'history';
const history = createBrowserHistory();
const Home = () => Welcome to Home
;
const About = () => Welcome to About
;
const matchPath = (pathname, options) => {
const { exact = false, path } = options;
const match = new RegExp(`^${path}`).exec(pathname);
if (!match) {
return null;
}
const url = match[0];
const isExact = pathname === url;
if (exact && !isExact) {
return null;
}
return {
path,
url,
isExact
};
};
const Router = ({ children }) => {
const [location, setLocation] = React.useState(history.location);
React.useEffect(() => {
const unlisten = history.listen(() => {
setLocation(history.location);
});
return unlisten;
}, []);
return (
{React.Children.map(children, child => {
const { path } = child.props;
const match = matchPath(location.pathname, { path, exact: true });
return match ? React.cloneElement(child, { match }) : null;
})}
);
};
const Route = ({ children, component, render, match, ...rest }) => {
console.log('match:', match);
if (!match) {
return null;
}
if (component) {
return React.createElement(component, { match });
}
if (children) {
return children({ match });
}
if (render) {
return render({ match });
}
return null;
};
const Link = ({ to, children }) => {
const handleClick = e => {
e.preventDefault();
history.push(to);
};
return (
{children}
);
};
const App = () => (
-
<Link to="/">Home
-
<Link to="/about">About
);
ReactDOM.render(
, document.getElementById('root'));
上述代码中我们使用createBrowserHistory生成以路由为基础的history对象,使用
五、React Router官网
React Router官网提供了React Router的文档、API、入门教程以及相关社区等资源。React Router官网提供了非常好的帮助文档和教程,方便我们了解React Router的使用和基本原理。六、React Router详细教程
React Router详细教程中,详细讲解了React Router的使用方法,从入门到实战项目逐步进行演示,非常实用。同时,React Router详细教程也解释了React Router的原理和核心概念。 下面是一个在React项目中使用
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter as Router, Route, Link } from 'react-router-dom';
const Home = ({ match }) => (
Welcome to Home
<Link to={`${match.url}/about`}>About
);
const About = () => (
Welcome to About
<Link to="/">Home
);
ReactDOM.render(
,
document.getElementById('root')
);
上述代码中我们使用<Link>标签实现页面跳转,使用
七、React Router高级用法
React Router高级用法包括了React Router的嵌套路由实现、路由守卫、动态路由等高级功能,可以帮助我们更加高效地管理路由。下面是一个示例:
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter as Router, Route, Link, Switch } from 'react-router-dom';
const Home = ({ match }) => (
Welcome to My Blog
Blog Hub:
-
<Link to={`${match.url}/tech`}>技术博客
-
<Link to={`${match.url}/life`}>生活博客
);
const Tech = () => (
Tech Blogs
- React组件编写
- 异步数据展示
);
const Life = () => (
Life Blogs
- 健身训练日记
- 旅游心情记录
);
const Author = ({ match }) => (
{match.params.author}
Author Hub:
-
<Link to={`${match.url}/tech`}>技术博客
-
<Link to={`${match.url}/life`}>生活博客
);
ReactDOM.render(
,
document.getElementById('root')
);
上述代码中我们使用<Link>标签实现嵌套路由、使用