zoukankan      html  css  js  c++  java
  • React 如何添加路由懒加载

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

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

    import React, { Component } from 'react'
    
    export const asyncComponent = (fn) => {
        // return 一个组件
        return class MyComponent extends Component {
            constructor() {
                super()
                this.state = {
                    C: null
                }
            }
            // 调用组件时会渲染当渲染完成后会执行componentDidMount这时候会调用fn
            componentDidMount() {
                // fn是一个异步的promise调用这时给组件进行复制重新渲染
                fn().then(module => {
                    // console.log(mod);
                    this.setState({
                        C: module.default
                        // module.default就是页面引进的真正要加载的组件
                    })
                })
            }
            render() {
                let { C } = this.state
                return (
                    <div>
                        {C ? <C {...this.props}></C> : null}
                        {/*{...this.props}是为了解决当前组件C没有Route所携带的信息无法跳转  但是如果想要必须接受,在App.js中route将信息传给Login,而Login就是此时类asyncComponent return的组件 所以进行结构赋值*/}
                    </div>
                )
            }
        }
    }

    1.2在App.js中引入组件

    import {asyncComponent} from "./utils/asyncComponent"
    在App.js中改写路由方式
    let Login=asyncComponent(()=>{return import("./pages/Login/Login")})
    在App.js路由规则中定义路由规则
    <Route path="/login" component={Login}></Route>
     
    2.使用React自带的 Suspense,lazy实现懒加载
     
    2.1在App.js中引入
    import React,{Suspense,lazy} from 'react'
    在定义的路由规则外面添加<Suspens fallback={<div>Loding..</div></Supens>}在div中的内容在加载中显示,可以自定义
     {/* 路由出口 */}
          <Suspense fallback={<div>Loading...</div>}>
            <Switch>
               {/* 路由规则  这里的MyRoute是自己定义的路由组件用于做路由拦截,判断是否登录*/}
               <Route path="/login" component={Login}></Route>
               <MyRoute path="/index" component={Index}></MyRoute>
               <MyRoute path="/movie" component={Movie}></MyRoute>
               <MyRoute path="/movieDetail" component={MovieDetail}></MyRoute>
               <MyRoute path="/food" component={Food}></MyRoute>
               <MyRoute path="/foodDetail/:foodId" component={FoodDetail}></MyRoute>
               {/* 重定向 */}
               <Redirect to="/login"></Redirect>
            </Switch>
          </Suspense>
     
    不停学习,热爱是源源不断的动力。
  • 相关阅读:
    Python 去掉文本中空行
    Pandas常用操作方法
    Numpy常用操作方法
    Python获取指定路径下所有文件的绝对路径
    Python获取指定目录下所有子目录、所有文件名
    Pycharm选中代码无法Backspace直接删除
    Redis常用命令(一)
    在eclipse程序中设置的断点上有一个斜杠,正常启动debug不能够跳转到debug页面,怎么解决
    常见的几种网络广告模式
    struts2中拦截器与过滤器的区别
  • 原文地址:https://www.cnblogs.com/ximenchuifa/p/13855358.html
Copyright © 2011-2022 走看看