zoukankan      html  css  js  c++  java
  • REACT路由

    现代的前端应用大多数是SPA(单页应用程序),也就是只有一个HTML页面的应用程序。因为它的用户体验更好、对服务器压力更小,所以更受欢迎。为了有效的使用单个页面来管理多页面的功能,前端路由应运而生。

    • 前端路由功能:让用户从一个视图(组件)导航到另一个视图(组件)
    • 前端路由是一套映射规则,在React中,是URL路径与组件的对应关系
    • 使用React路由简单来说,就是配置路径和组件

     

    路由使用

    https://reactrouter.com/

    3.2.1、安装路由模块

    路由模块不是react自带模块,需要安装第3方模块

    npm i -S react-router-dom

    相关组件

    • Router组件:包裹整个应用,一个React应用只需要使用一次

       Router: HashRouter和BrowserRouter

           HashRouter: 使用URL的哈希值实现 (localhost:3000/#/first)

           BrowserRouter:使用H5的history API实现(localhost3000/first)

    • Link/NavLink组件:用于指定导航链接(a标签)

    最终Link会编译成a标签,而to属性会被编译成 a标签的href属性

    • Route组件:指定路由展示组件相关信息(组件渲染)

    path属性:路由规则,这里需要跟Link组件里面to属性的值一致

       component属性:展示的组件

    各组件关系示意图

    使用路由

    在src/App.js中导入路由组件

    import React, { Component } from 'react'

    import { HashRouter as Router, Route, Link } from 'react-router-dom'

    import Home from './pages/Home'

    import News from './pages/News'

     

    class App extends Component {

      render() {

        return (

          <Router>

            <h3>导航区域</h3>

            <hr />

            <ul>

              <li>

                <Link to="/home">首页</Link>

              </li>

              <li>

                <Link to="/news">新闻</Link>

              </li>

            </ul>

            <hr />

            <Route path="/home" component={Home} />

            <Route path="/news" component={News} />

          </Router>

        );

      }

    }

    export default App

    src/index.js文件中定义一个路由模式

    App.jsx文件中定义路由导航

    声明式导航

    使用Link或NavLink组件完成声明式导航的定义

    import React, { Component } from 'react'
    
    // react中的路由规则都是以组件的方式定义
    import { Route, Link, NavLink } from 'react-router-dom'
    
    // 导入渲染的视图组件
    import Home from './views/Home'
    import News from './views/News'
    import Profile from './views/Profile'
    
    // 样式
    import './assets/css/app.css'
    import Detail from './views/Detail'
    
    class App extends Component {
    
      constructor(props) {
        super(props);
      }
    
    
      render() {
        return (
          <>
            {/* <ul>
              {
                //  字符串形式申明路由
              }
              <li><Link to="/">首页</Link></li>
              <li><Link to="/news">新闻列表</Link></li>
              {
                // 对象形式
              }
              <li><Link to={{
                pathname: '/profile'
              }}>个人中心</Link></li>
            </ul>
            <br /><br />
            <br /> */}
            <ul>
              <li><NavLink exact activeClassName="active" to="/">首页</NavLink></li>
              <li><NavLink activeClassName="active" to="/news">新闻列表</NavLink></li>
              <li><NavLink activeClassName="active" to="/profile">个人中心</NavLink></li>
            </ul>
            <hr />
    
            {/* path访问的uri路径  component就是匹配成功后渲染的组件 */}
            {/* exact 严格匹配 */}
            {/* Rouet组件中匹配成功的渲中会自动在this.props添加路由导航相关属性方法 */}
            <Route exact path="/" component={Home} />
            <Route path="/news" component={News} />
            <Route path="/profile" component={Profile} />
            {/* 动态路由 */}
            <Route path="/detail/:id" component={Detail} />
          </>
        )
      }
    
    }
    export default App

    路由参数

    Route定义渲染组件时给定动态绑定的参数

    • params

    在路由目标页面中通过this.props.match.params得到

    • query

    通过地址栏中的 ?key=value&key=value,通过this.props.location.search

    • state

    隐式转参,一点用于数据的收集 this.props.location.state

    获取路由中的参数数据

    右侧打赏一下 代码改变世界一块二块也是爱
  • 相关阅读:
    内联函数(inline function)
    被extern "C" 修饰后按照C语言编译
    函数重载-name mangling或mame decoration技术-看看反汇编
    cin、cout
    下载visual studio 环境搭建
    配置共享文件夹
    EFS加密文件系统
    十二、字符串(1)
    十五、文件
    十一、指针
  • 原文地址:https://www.cnblogs.com/ht955/p/14721504.html
Copyright © 2011-2022 走看看