---
# System prepended metadata

title: react-router-example(1)
tags: [react]

---

---
tags: react,
disqus: hackmd
---

###### tags: `react-router`

# react-router-example(1)

[一探究竟了解React-router 4簡易教學](https://www.ucamc.com/e-learning/javascript/278-%E7%B0%A1%E5%96%AE%E4%BB%8B%E7%B4%B9%E4%BA%86%E8%A7%A3react-router-4%E6%95%99%E5%AD%B8)

---

這裡用來記錄，我在實作練習react-router的一些記錄。

[React-router](https://reacttraining.com/react-router/)，一進入就可以看到兩顆很大的按鈕web、native。
因為我們是寫web，所以就選擇web，native是給react-native的。

![](https://i.imgur.com/t7y1CWk.png)

本篇環境位置：[Github](https://github.com/hsiaomingcheng/react-router-example/tree/feature/200618/add-project/chrishsiao)
因為我不是使用CRA(create-react-app)的方式，所以環境建置的部分我就不多提，你可以依照官網介紹方式用CRA練習，或是下載我的再自己跑起來。

### Quick Start

進到Quick Start頁面後，在畫面的右半邊就可以看到，指令跟程式碼，
再搭配中間的文字解釋。

先安裝：

```
yarn add react-router-dom
```

安裝完之後就可以開工啦～

```javascript=
import {
    BrowserRouter as Router,
    Switch,
    Route,
    Link,
} from 'react-router-dom';

class App extends Component {
    render() {
        return (
            <div className="App">
                <Router>
                    <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>

                        {/* A <Switch> looks through its children <Route>s and
            renders the first one that matches the current URL. */}
                        <Switch>
                            <Route path="/about">
                                <About />
                            </Route>
                            <Route path="/users">
                                <Users />
                            </Route>
                            <Route path="/">
                                <Home />
                            </Route>
                        </Switch>
                    </div>
                </Router>
            </div>
        );
    }
}

export default App;

function Home() {
    return <h2>About</h2>;
}

function About() {
    return <h2>About</h2>;
}

function Users() {
    return <h2>Users</h2>;
}

```

接著就可以打開頁面看成果了。

看看程式碼的部分，共引入了BrowserRouter、Switch、Route、Link這四個。

#### BrowserRouter
在引入的時候被改名為Router，被包在結構的外層。

#### Link
作用就像A標籤一樣，實際在看轉出的程式碼也是，看到他被轉成A標籤。
![](https://i.imgur.com/yrWjySg.png)

#### Switch
就像是一個切換開關一樣，把所有的Route給包住，包覆著每一個對應的切換內容。

#### Route
簡單說就是你每個頁面的內容。

如果去比較程式碼與轉出的DOM，可以發現除了Link會被轉成a標籤以外，剩下的三個皆不會出現在HTML上。
