简介
这是我学习react-router-dom@5.1.2时,为了加深自己对react-router-dom的理解和帮助一些英文不好的同学,对官方文档进行了翻译,本人水平有限,如有理解和翻译错误,欢迎大家指正。官网地址
快速入门
要在web应用中开始使用React Router,您将需要一个React Web应用程序.如果您需要创建一个,我们建议您尝试Create React App。这是一个非常流行的工具,可与React Router很好地配合使用。
首先,安装create-react-app并使用它创建一个新项目。
安装
您可以使用npm或yarn从公共npm注册表中安装React Router。由于我们构建的是web app,因此在本指南中将使用react-router-dom。
npm install -g create-react-app // 全局安装 create-react-app
create-react-app demo-app // 创建一个react项目
cd demo-app // 进入react项目目录
npm install react-router-dom // 安装react-router-dom
接下来,将以下两个示例之一复制/粘贴到src/App.js中。
第一个示例:基本路由
在此示例中,路由器处理了3个“页面”:主页、关于页面和用户页面。当您点击不同的<Link>时,这个路由会渲染匹配的<Route>。
注意:其实<Link>最后渲染出来是一个有真实href的标签,因此使用键盘导航或屏幕阅读器的人也可以使用react-router-dom。
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter, Switch, Route, Link } from 'react-router-dom';
function Home(props) {
console.log('Home=>', props);
return <h2>Home</h2>
}
function About(props) {
console.log('About=>', props);
return <h2>About</h2>;
}
function Users(props) {
console.log('Users=>', props);
return <h2>Users</h2>;
}
function App() {
return <BrowserRouter>
<div>
<nav>
<ul>
<li>
<Link to={'/'}>Home</Link>
</li>
<li>
<Link to={'/about'}>About</Link>
</li>
<li>
<Link to={'/users'}>Users</Link>
</li>
</ul>
</nav>
{/* <Switch>通过查找所有的子<Route>并渲染与当前URL匹配的第一个<Route>的内容 */}
<Switch>
<Route path={'/about'}>
<About />
</Route>
<Route path={'/users'} children={<Users />}/>
<Route path={'/'}>
<Home />
</Route>
</Switch>
</div>
</BrowserRouter>
}
ReactDOM.render(<App />, document.querySelector('#root'));
第二个示例:嵌套路由
此示例显示了嵌套路由的工作方式。路线/topics会加载Topics组件,在这个组件上的path:id值上有条件地渲染任何其他<Route>。
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter, Switch, Route, Link, useRouteMatch, useParams } from 'react-router-dom';
function Home(props) {
console.log('Home=>', props);
return <h2>Home</h2>
}
function About(props) {
console.log('About=>', props);
return <h2>About</h2>;
}
function Topic() {
let { topicId } = useParams();
return <h3>Requested topic ID: {topicId}</h3>
}
function Topics() {
const match = useRouteMatch();
console.log('match=>', match);
return (
<div>
<h2>Topics</h2>
<ul>
<li>
<Link to={`${match.url}/components`}>Components</Link>
</li>
<li>
<Link to={`${match.url}/props-v-state`}>Props v. State</Link>
</li>
</ul>
{/*
Topics页面有自己的<Switch>,其中包含更多的路线,建立在/topics路径之上
您可以将第二个<Route>视为所有主题的“索引”页面,或者当未选择任何主题时显示的页面
*/}
<Switch>
<Route path={`${match.path}/:topicId`}>
<Topic />
</Route>
<Route path={match.path}>
<h3>Please select a topic.</h3>
</Route>
</Switch>
</div>
);
}
function App() {
return <BrowserRouter>
<ul>
<li>
<Link to={'/'}>Home</Link>
</li>
<li>
<Link to={'/about'}>About</Link>
</li>
<li>
<Link to={'/topics'}>Topics</Link>
</li>
</ul>
<Switch>
<Route path={'/about'}>
<About />
</Route>
<Route path={'/topics'}>
<Topics />
</Route>
<Route path={'/'}>
<Home />
</Route>
</Switch>
</BrowserRouter>
}
ReactDOM.render(<App />, document.querySelector('#root'));
继续
希望这些示例能让您对使用React Router创建web app有点感觉。继续阅读可以了解有关React Router中主要组件的更多信息!
未完待续….
发表回复