• React中的路由


    安装:

    npm i react-router-dom@5.3.4

    前端路由的功能:让用户从一个视图导航到另一个视图。

    前端路由是一套映射规则,是URL路径与组件的对应关系。

    使用React路由实际就是配置路径和组件。

    1.在router文件下定义路由

    1. // 和vue不同之处,这是一个组件,类组件,函数组件都可以
    2. import React, { Component } from 'react'
    3. // 引入Switch组件,Route
    4. import {Switch,Route,Redirect} from "react-router-dom";
    5. // 引入要显示的组件
    6. import ComAFn from '../ComAFn';
    7. import ComBClass from "../ComBClass"
    8. import Not from '../Not';
    9. import FirstPage from '../FirstPage';
    10. export default class router extends Component {
    11. render() {
    12. return (
    13. <div>
    14. <Switch>
    15. {/* 匹配的方式,url中是否包含组件的path,如果包含就认为匹配成功,显示当前组件,不在向后匹配,所以path="/"页面不会随着路由切换更改,此时加上exact精准匹配就可以了 */}
    16. <Route path="/" exact component={FirstPage}>Route>
    17. <Route path="/afn" component={ComAFn}>Route>
    18. <Route path="/class" component={ComBClass}>Route>
    19. <Route path="/404" component={Not}>Route>
    20. {/* 对路由重定向 */}
    21. <Redirect to="/404">Redirect>
    22. Switch>
    23. div>
    24. )
    25. }
    26. }

    2.在index.js文件定义路由模式

    1. // 导入哈希模式 或者BrowserRouter history模式
    2. // import { HashRouter } from 'react-router-dom';
    3. import { BrowserRouter as Router } from 'react-router-dom';
    4. const root = ReactDOM.createRoot(document.getElementById('root'));
    5. root.render(
    6. <Router>
    7. <App />
    8. Router>
    9. );

    3.在App.js文件导出以及withRouter解决非路由组件无法跳转问题。

    1. // import logo from './logo.svg';
    2. import './App.css';
    3. // 引入组件
    4. import {Link,withRouter} from "react-router-dom";
    5. import Router from './components/router/router';
    6. import React, { Component } from 'react'
    7. class App extends Component {
    8. constructor(){
    9. super()
    10. }
    11. jump(url){
    12. this.props.history.push(url)
    13. }
    14. render() {
    15. return (
    16. <div>
    17. <Router>Router>
    18. {/* 声明式导航 */}
    19. <Link to="/afn" >去afnLink><br>br>
    20. <Link to="/class" >去classLink>
    21. {/* <NavLink exact activeClassName="active" to="/afn" >去afnNavLink><br>br>
    22. <NavLink exact activeClassName="active" to="/class" >去classNavLink> */}
    23. {/* 编程式导航 */}
    24. <button onClick={()=>this.jump("/afn")}>afnbutton>
    25. <button onClick={()=>this.jump("/class")}>classbutton>
    26. div>
    27. )
    28. }
    29. }
    30. // App根组件中非Route包括的是非路由组件,无法跳转且会报错,可以通过withRouter来解决
    31. // 给非路由组件增加属性和方法
    32. // eslint-disable-next-line no-undef
    33. const App1=withRouter(App)
    34. export default App1

  • 相关阅读:
    如何使用ModelBox快速提升AI应用性能?
    唯物辩证法-条件论
    K8s日志类型综述
    基于STM32蓝牙控制的app智能台灯设计
    Java虚拟机反射机制与动态代理
    【Socket】①Socket技术概述
    “好声音“连唱10年,星空华文如何唱响港交所?
    Linux设置开机自启动的方式
    java读取word里面的表格数据
    ue5 pico 手柄按键获取
  • 原文地址:https://blog.csdn.net/qq_72760247/article/details/127902398