原文:Learn React Router in 5 Minutes - A Beginner's Tutorial,作者:Bob Ziroll

有时你只有 5 分钟的时间,与其把时间浪费在社交媒体上,不如让我们在 5 分钟内了解一下 React-Router!在本教程中,我们将通过为 Scrimba 针织店网站创建导航来学习 React 中的路由基础知识。

如果你需要对这一主题进行了解,你可以加入我即将开设的 React 高级课程的等待名单,或者如果你还是个初学者,可以看看我的 React 入门课程

React-Router 到底是什么?

许多现代网站实际上是由一个页面组成的,它们只是看起来像多个页面,因为它们包含像独立页面一样渲染的组件。这些通常被称为 SPA--单页应用程序。在其核心部分,React Router 所做的是根据 URL 中使用的路由(/ 代表主页,/about 代表关于页面,等等),有条件地渲染某些组件来显示。

例如,我们可以使用 React Router 将 www.knit-with-scrimba.com/ 连接到 www.knit-with-scrimba.com/about or www.knit-with-scrimba.com/shop

听起来很好 - 我如何使用它?

要使用 React Router,你首先要用 NPM 安装它。

npm install react-router-dom

另外,你也可以直接使用 Scrimba 中的这个项目,它的代码已经写好了。

你需要从 react-router-dom 包中导入 BrowserRouter、Route 和 Switch。

import React, { Component } from 'react';
import { BrowserRouter, Route, Switch } from 'react-router-dom';

在我的例子中,我将登陆页面与另外两个“页面”(实际上只是组件)连接起来,它们是 ShopAbout

首先,你需要设置你的应用程序与 React Router 一起工作。所有被渲染的东西都需要放在 <BrowserRouter> 元素里面,所以先把你的 App 包在这些元素里面。这个组件设置显示所有你提供给它的各种组件的逻辑。

// index.js
ReactDOM.render(
    <BrowserRouter>
        <App />
    </BrowserRouter>, 
    document.getElementById('root')
)

接下来,在你的 App 组件中,添加 Switch 元素(开放和关闭标签)。这些确保一次只渲染一个组件。如果我们不使用这个,我们可以默认为 Error 组件,我们将在后面提到。

function App() {
    return (
        <main>
            <Switch>
                
            </Switch>
        </main>
    )
}

现在是时候添加你的 <Route> 标签了。这些是组件之间的链接,应该放在 <Switch> 标签内。

要告诉 <Route> 标签要加载哪个组件,只需添加一个 path 属性和你想用 component 属性加载的组件名称。

<Route path='/' component={Home} />

许多主页的 URL 是网站名称后面加一个 "/",例如,www.knit-with-scrimba.com/。在这种情况下,我们在 Route 标签中加入 exact。这是因为其他的 URL 也包含 “/”,所以如果我们不告诉应用程序它只需要寻找 /,它就会加载第一个与路由匹配的 URL,我们就会遇到一个相当棘手的 bug。

function App() {
    return (
        <main>
            <Switch>
                <Route path="/" component={Home} exact />
                <Route path="/about" component={About} />
                <Route path="/shop" component={Shop} />
            </Switch>
        </main>
    )
}

现在将组件导入到应用程序中。你可能希望把它们放在一个单独的 “components” 文件夹中,以保持代码的清晰和可读性。

import Home from './components/Home';
import About from './components/About';
import Shop from './components/Shop';

关于我前面提到的错误信息,如果用户输入了错误的 URL,就会加载。这就像一个普通的 <Route> 标签,但没有路径。错误组件包含 <h1>Oops! Page not found!</h1>。不要忘记把它导入到应用程序中。

function App() {
    return (
        <main>
            <Switch>
                <Route path="/" component={Home} exact />
                <Route path="/about" component={About} />
                <Route path="/shop" component={Shop} />
                <Route component={Error} />
            </Switch>
        </main>
    )
}

到目前为止,我们的网站只能通过输入 URL 进行导航。为了给网站添加可点击的链接,我们使用 React Router 的 Link 元素,并设置了一个新的 Navbar 组件。再提醒一次,别忘了把新组件导入到应用程序中。

现在为应用程序中的每个组件添加一个 Link,并使用 to="URL" 来链接它们。

function Navbar() {
  return (
    <div>
      <Link to="/">Home </Link>
      <Link to="/about">About Us </Link>
      <Link to="/shop">Shop Now </Link>
    </div>
  );
};

你的网站现在有了可点击的链接,你的单页应用程序可以导航了。

小结

如果你想在 React 应用程序中轻松导航,忘记锚标签,添加 React Router。它很清晰,很有条理,而且它使添加和删除页面变得更加容易。

祝你编程愉快!