• React 如何添加路由懒加载


    1.第一种自己定义组件在加载时调用

    1.1在工具类文件夹utils下面创建一个asyncComponent.js文件写入一下代码

    1. import React, { Component } from 'react'
    2. export const asyncComponent = (fn) => {
    3. // return 一个组件
    4. return class MyComponent extends Component {
    5. constructor() {
    6. super()
    7. this.state = {
    8. C: null
    9. }
    10. }
    11. // 调用组件时会渲染当渲染完成后会执行componentDidMount这时候会调用fn
    12. componentDidMount() {
    13. // fn是一个异步的promise调用这时给组件进行复制重新渲染
    14. fn().then(module => {
    15. // console.log(mod);
    16. this.setState({
    17. C: module.default
    18. // module.default就是页面引进的真正要加载的组件
    19. })
    20. })
    21. }
    22. render() {
    23. let { C } = this.state
    24. return (
    25. <div>
    26. {C ? <C {...this.props}></C> : null}
    27. {/*{...this.props}是为了解决当前组件C没有Route所携带的信息无法跳转 但是如果想要必须接受,在App.js中route将信息传给Login,而Login就是此时类asyncComponent return的组件 所以进行结构赋值*/}
    28. </div>
    29. )
    30. }
    31. }
    32. }

    1.2在App.js中引入组件

    import {asyncComponent} from "./utils/asyncComponent"

    在App.js中改写路由方式

    let Login=asyncComponent(()=>{return import("./pages/Login/Login")})

    在App.js路由规则中定义路由规则

    2.使用React自带的 Suspense,lazy实现懒加载

    2.1在App.js中引入

    import React,{Suspense,lazy} from 'react'

    在定义的路由规则外面添加Loding..

    }在div中的内容在加载中显示,可以自定义

    1. {/* 路由出口 */}
    2. <Suspense fallback={<div>Loading...</div>}>
    3. <Switch>
    4. {/* 路由规则 这里的MyRoute是自己定义的路由组件用于做路由拦截,判断是否登录*/}
    5. <Route path="/login" component={Login}></Route>
    6. <MyRoute path="/index" component={Index}></MyRoute>
    7. <MyRoute path="/movie" component={Movie}></MyRoute>
    8. <MyRoute path="/movieDetail" component={MovieDetail}></MyRoute>
    9. <MyRoute path="/food" component={Food}></MyRoute>
    10. <MyRoute path="/foodDetail/:foodId" component={FoodDetail}></MyRoute>
    11. {/* 重定向 */}
    12. <Redirect to="/login"></Redirect>
    13. </Switch>
    14. </Suspense>

     

  • 相关阅读:
    【Gazebo入门教程】第六讲 控制器插件的编写与配置(下)
    【华为机试真题 JAVA】字符串删除后的最大数值-100
    华为L3VPNv4 over SRv6 BE配置案例
    WebRTC之丢包重传协议
    Mysql发生死锁的原因,已经解决方法详解
    捷报 | 美格智能Cat.1模组SLM332中标中国电信定制版Cat.1模组产品招募
    node.js笔记
    Python学习笔记--对象的描述器
    OpenTiny Vue 3.11.0 发布:增加富文本、ColorPicker等4个新组件,迎来了贡献者大爆发!
    未在本地计算机上注册“Microsoft .ACE. OLEDB .12.0”提供程序
  • 原文地址:https://blog.csdn.net/weixin_44786530/article/details/126905095