官方链接:https://reactrouter.com/web/guides/quick-start

(这次的笔记对 React Router 写了几句简单的代码,下回有时间重新把例子补充得好看一些,并做页面展示)

一、实现路由切换

1. 概念理解

用户能够在浏览器上输入不同的 url 得到不同的页面展示,步骤如下:

  1. 获取输入的 url 中 的 hash 值
  2. 根据不同 hash 值选择展示不同的页面
  1. // 进入页面
  2. let type = window.location.hash
  3. if(type === '#register'){
  4. //...
  5. }else{
  6. /...
  7. }
  8. // 这里写逻辑
  9. // 点击「注册」,直接把 window.location.hash 改成 #register
  10. // 点击「登录」,直接把 window.location.hash 改成 #login

除了不同 hash 展示不同页面外,还可以改变路径

  • 这种方式需要后端支持,要把所有路径都指向首页
  1. window.location.pathname // 不直接修改这个,直接这样改变路径会刷新页面
  2. window.history.pushState(state,title,[,url]) // 使用这种方式就不会刷新页面
  1. // 进入页面
  2. let type = window.location.pathName
  3. if(type === '#register'){
  4. //...
  5. }else{
  6. /...
  7. }
  8. // 这里写逻辑
  9. // 点击「注册」,通过 window.pushState(state,title,'/register') 修改路径
  10. // 点击「登录」,通过 window.pushState(state,title,'/login') 修改路径

2. 简单例子

使用 Hash 模式

  1. import React, { useState } from "react";
  2. import ReactDOM from "react-dom";
  3. function Tab1() {
  4. return (
  5. <div>这是页面 1 </div>
  6. )
  7. }
  8. function Tab2() {
  9. return (
  10. <div>这是页面 2</div>
  11. )
  12. }
  13. function App() {
  14. let [tab, setTab] = useState('#tab1')
  15. let hashValue = window.location.hash
  16. let tabPage = <Tab1 />
  17. if (hashValue === '#tab1') {
  18. tabPage = <Tab1 />
  19. } else if (hashValue === '#tab2') {
  20. tabPage = <Tab2 />
  21. } else {
  22. tabPage = <Tab2 />
  23. }
  24. return (
  25. <div>
  26. <button onClick={() => { setTab('tab1'); window.location.hash = '#tab1' }}>切换为 Tab1</button>
  27. <br />
  28. <button onClick={() => { setTab('tab2'); window.location.hash = '#tab2' }}>切换为 Tab2</button>
  29. {tabPage}
  30. </div>
  31. )
  32. }
  33. const rootElement = document.getElementById("root");
  34. ReactDOM.render(<App />, rootElement);

二、使用 React Router

我使用的例子都是 Hash 模式,没有使用 History 模式,React Router 记住以下几个常用标签

  • Router
  • Link
  • Switch
  • Route
  1. import React from "react";
  2. import ReactDOM from "react-dom";
  3. import {HashRouter as Router,Link, Switch, Route} from 'react-router-dom'
  4. function Tab1(){
  5. return (
  6. <div>这是页面 1 </div>
  7. )
  8. }
  9. function Tab2(){
  10. return (
  11. <div>这是页面 2</div>
  12. )
  13. }
  14. function App(){
  15. return (
  16. <Router>
  17. <div>
  18. <Link to='/tab1'>Tab1</Link>
  19. <br/>
  20. <Link to='/tab2'>Tab2</Link>
  21. <Switch>
  22. <Route path="/tab1" component={Tab1} />
  23. <Route path="/tab2" component={Tab2} />
  24. <Route exact path="/" component={Tab1} />
  25. </Switch>
  26. </div>
  27. </Router>
  28. )
  29. }
  30. const rootElement = document.getElementById("root");
  31. ReactDOM.render(<App />,rootElement);

「@浪里淘沙的小法师」