React 路由 -- React router(基础一)

140 阅读2分钟

一. 什么是路由?

路由是根据不同的 URL 地址展示不同的内容或者页面!!!

二. React 路由

React 路由的实现主要是 react-router ,而它又被分为三部分:

  • react-router 是 router 的核心代码
  • react-router-dom 是用于浏览器的,基于浏览器封装的!!
  • react-router-native 是用于原生应用的

三. React-router 基本使用

下面让我们针对 router 的核心代码,说一下react-router的基本使用:

(1) < BrowserRouter > < HashRouter > < Route >

< BrowserRouter >< HashRouter >

用 < BrowserRouter > 或者 < HashRouter > 包括里面的一个个注册路由!!只在顶级路由中使用!!!

< router > 用于匹配路径

  • path属性: 用于设置匹配到的路径

  • component 属性: 设置匹配到路径后,渲染的组件

  • exact: 精准匹配,只有精准匹配到完全一致的路径,才会渲染对应的组件, 比如: Home 组件的 path 是'/', About 组件的 path 是'/about', 那么在匹配'/'的时候如果不是精准匹配会将 '/' 和'/about'都匹配出来,然后将两个组件都渲染到界面上

可以把路由组件封装成一个总的组件,然后引入到普通组件里!!! 1885.png

1886.png

(2) < Switch /> 选择匹配 < Redirect /> 重定向

< Switch />

  • 在一个个注册路由套上 < Switch /> 就说明,会从上到下进行匹配,匹配到就会进结束匹配!!
  • 如果不加的话,默认会将匹配到的所有组件都会被渲染出来

< Redirect />

  • 语法为 < Redirect from="需要重定向的地址" to="需要跳转到的地址" (exact) >

1887.png

(3) 嵌套路由

嵌套在组件中的,一般会写在组件中,写法一般跟顶级路由写法是一样的,就是不用套外面的< BrowserRouter >< HashRouter >了。直接 < Switch >包括上就行!!

1888.png

(4) 路由跳转方式
<1> 声明式导航

声明式导航就是使用 < a /> 或者 封装好的 < Link /> 和 < NavLink />

< Link />< NavLink />

  • to属性: Link 中最重要的属性,用于设置跳转到的路径

  • activeStyle:活跃(匹配)时的样式;<NavLink exact to="/" activeStyle={{color: "red", fontSize: "30px"}}>首页</NavLink>

  • activeClassName: 活跃时添加的 class, 默认情况下NavLink匹配成功时会动态添加一个名为 active 的 class, 所以我们也可以直接编写样式, 如果担心这个 class 在其他地方也使用了,出现样式的层叠,就可以使用 activeClassName 自己添加样式

  • exact: 精准匹配

<2> 编程式导航

编程式导航是使用原生 JS 的方法 或者 react路由的 history 对象上的方法,进行路由的跳转!!

原生JS:

window.location.href = "#/detail/xxx"

react路由的history:

获取history有两种方法:

  • 使用 props 属性,因为前面我们有注册路由,即< Route path="/film" component = {Film}> ,所以说我们认为 Film 组件就是 Route 组件的孩子,那么就会接收到父亲组件传过来的好东西!!!

    - props属性身上就有 history 对象哦
    

1889.png

  • 使用react-router-dom封装的 hooks 里的 useHistory() ,会返回一个 history 对象!!

1900.png