美文网首页
REACT 009 react ROUTER (路由)

REACT 009 react ROUTER (路由)

作者: 苏少冬 | 来源:发表于2020-05-07 15:06 被阅读0次
    • 单页面应用(SPA)
      :单个页面的web应用,只有一个页面,所有需要展示的应用都在这一个页面实现切换(手机网站居多、或者PC端管理系统类也是但页面为主)
      webpack只需要配置一个入口

    • 多页面应用(MPA)
      :指一个项目有很多页面组成,使用这个产品,主要就是页面之间调转(PC端多页面应用居多)
      基于框架开发,需要在webpack中配置多入口,每个入口对应一个页面

    • react-router-dom (3.x之前版本叫react-router)
      学习react-router-dom官网
      http://reacttraining.cn/web/api/

    import {BrowserRouter , HashRouter} from 'react-router-dom'

    1. BrowserRouter,HashRouter他是两种常用的路由实现思想,

    BrowserRouter浏览器路由
    他是基于H5中的history API(puahState,replaceState,popstate)来保持UI和URL的同步
    真实项目中应用不多,一般只有当前项目是基于服务器渲染的,来我们才会用浏览器路由

    HashRouter 哈希路由
    真实项目中(前后端分离项目中)我们经常使用的是哈希路由完成,它依据相同的页面地址,不通的哈希值,来规划当前页面中的那一个组件呈现它基于原声JS构造了一套类似于history API机制,每一次路由切换都是基于history stack 完成的!


    ReactDOM.render(
      <Provider store = {store}>
      <HashRouter>
        <div>
          <Route path='/' exact component={A} />
          <Route path='/user' component={B} />
          <Route path='/my' component={C} />
        </div>
      </HashRouter>
      </Provider>
      ,
      document.querySelector("#root"))
    

    HashRouter

    1. 当前项目一旦使用HashRouter则默认在页面地址后面加上“#/” HashRouter默认值是一个 /
    2. 我们一般让其显示首页内容 HashRouter中只能出现一个子元素
    3. HashRouter机制中,我们需要根据哈希地址不同,展示不同的组件内容,此时使用route

    route

    1. path:设置匹配的地址,但是默认不是严格匹配模式 可以加 exact严格属性
    2. component:一旦当前route和path相同就渲染component知道的组件
    3. exact strict 两种严格模式

    4. render : render是一个方法,一般在里面处理的是权限校验,一般返回一个组件
          <Route path='/my' render={()=>{
            return <C/>
          }} />
    
    1. HashRouter 默认情况下会和每一个route都做校验,哪怕之前有校验成功的
    2. switch : 使用switch标签把route包裹起来,这样当path匹配到合适的之后就不会向下继续匹配了


    3. 当route中没有path属性的话就是匹配所有界面
          <Route render={()=>{
            return <div>404</div>
          }}/>
    
    1. redirect : 重定向 有push属性,如果设置了push属性,当前跳转的地址会加入到history stack中一条记录





      image.png
    2. withRouter 在路由切换的时候所有收路由管控的组件会刷新一下,但是这个时候有些不受路由管控的组件也需要刷新,这时候我们用withRouter
    import {HashRouter , Route , Redirect , Switch , withRouter} from 'react-router-dom'
    export default withRouter(connect()(Detail))
    
    1. history``location``match所有收路由管控的组件,在组件的属性PROPS上都会默认添加三个属性
      history : 实现js中的路由跳转

      location : 得到当前路由中的信息
      ![](https://img.haomeiwen.com/i11136901/72bc0709d12adb6f.png?imageMogr2/auto-orient/strip%7Cimage View2/2/w/1240)
      match :获取的是当前路由匹配的一些结果
    • 路由跳转传递参数(除了redux和本地储存 不推荐)
    1. 问号传参数


      去除❓需要使用插件QS 安装qs
    1. 基于Link中的state传值(一旦页面刷新,上次传递的值就没有了)



    2. URL地址传参(需要根改路由)



      路由修改



      传递

      解析(使用match)


      image.png

    find函数


    • 当路由切换的时候,对应的组件会重新渲染,但是渲染也分为两种情况
      1. 之前渲染其他组件的时候把当前组件彻底重页面中移除了,再次渲染组件的之后走的是挂载流程(也就是重头开始)
      2. 如果当前组件之前没有彻底在页面中移除(在本组件中的子组件切换),每一次走的是更新的流程,不是挂载的流程

    55 02

    相关文章

      网友评论

          本文标题:REACT 009 react ROUTER (路由)

          本文链接:https://www.haomeiwen.com/subject/ykaksqtx.html