React懒加载/动态加载lazy简单实例

news2024/11/28 6:33:15

两种页面嵌套的方式,一种是父子组件,一种是懒加载

1、父子组件(可略,只用来做例子对比)

原本需要用父子组件来实现页面嵌套,如果嵌套的组件不多,可以这样实现
父页面

import React,{Component} from "react";
import {Button} from "antd"
import LazyLoadsOne from './LazyLoadsOne' //直接导入子组件
import LazyLoadsTwo from './LazyLoadsTwo'
class LazyLoads extends Component{
    constructor(props){
        super(props);
        this.state = {
            visible:true,
        }
    }

    genghuanZujian=(vis)=>{
        this.setState({visible:!vis})
    }
    render() {
        const {visible} =this.state;
        return(
            <div>
                <h2>这是父组件</h2>
                <Button type="primary" onClick={()=>{this.genghuanZujian(visible)}} >普通更换组件</Button>
                {visible&&<LazyLoadsOne/>}
                {!visible&&<LazyLoadsTwo/>}
            </div>
        )
    }

}
export default LazyLoads;

子页面

import React from "react";
const LazyLoadsOne = ()=>{
    return(
        <div>
            <h2>
                这是子页面One
        </h2>

        </div>
    );

};
export default LazyLoadsOne;
import React from "react";
const LazyLoadsTwo = ()=>{
    return(
        <div>
            <h2>
                这是子页面Two
        </h2>


        </div>
    );

};
export default LazyLoadsTwo;

在这里插入图片描述

2、使用懒加载

1、新建一个文件PageUtil.js,用于存放子组件地址

export function getPage(pageCode) {
    switch (pageCode) {
        case 'LazyLoadsOne':
            return React.lazy(()=>import('./LazyLoadsOne'));
        case 'LazyLoadsTwo':
            return React.lazy(()=>import('./LazyLoadsTwo'));
        case 'LazyOne':
            return React.lazy(()=>import('./LazyOne'));
        case 'LazyTwo':
            return React.lazy(()=>import('./LazyTwo'));
        default:
            return null;
    }
}

父页面

import React,{Component,Suspense,useRef} from "react";
import {Button,Spin,Form,Input} from "antd"
import {getPage} from './PageUtil'

class LazyLoads extends Component{
    constructor(props){
        super(props);
        this.form = React.createRef();
        this.state = {}
    }


    lazyGenghuanZujian=()=>{
        //当使用一个在浏览器中不存在的标签或以小写开头的组件名时,会报"The tag is unrecognized in this browser"React警告。
        //组件名首字母大写是React用来区分我们编写的组件和存在于浏览器中的内置标签的惯例
        const Zujian = getPage('LazyOne');//这样就能根据条件动态获取子组件
        this.setState({
            pageContent :<Zujian ref={(e)=>{this.page=e}} />
        })

    }

    render() {
        const {pageContent} = this.state;
        return(
            <div>
                <h2>这是父组件</h2>
                <Form ref={this.form} name="control-hooks" onFinish={this.lazyGenghuanZujian}>
                    <Form.Item label="请输入加载模块:" name="id">
                        <Input/>
                    </Form.Item>
                    <Form.Item>
                        <Button type="primary" htmlType="submit">懒加载更换组件</Button>
                    </Form.Item>
                </Form>
                <Suspense fallback={<Spin/>} >
                    {pageContent}
                </Suspense>
            </div>
        )
    }

}
export default LazyLoads;

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/741994.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android代码解读之渲染机制揭秘

问题 1.vsync如何协调应用和SurfaceFlinger配合来完成UI渲染、显示&#xff0c;App接收vsync后要做哪些工作&#xff1f; 2.requestLayout和invalidate区别&#xff1f; 3.performTraversals到底是干什么了&#xff1f; 4.surfaceflinger怎么分发vsync信号的&#xff1f; …

【Java】继承背后那些事---深扒继承基本原理|类加载、子类对象创建、方法调用、变量访问

博主简介&#xff1a;努力学习的预备程序媛一枚~博主主页&#xff1a; 是瑶瑶子啦所属专栏: Java岛冒险记【从小白到大佬之路】 学习了继承、多态 本节&#xff0c;将通过一个简单的例子&#xff0c;从概念上介绍原理&#xff08;实际实现的细节与此有所差别&#xff09;&#…

HuggingGPT解析:使用 ChatGPT及HuggingFace上的族系解决AI问题

HuggingGPT解析&#xff1a;使用 ChatGPT及HuggingFace上的族系解决AI问题 HuggingGPT是一个利用大型语言模型(LLMs)来解决复杂AI任务的框架。其基本理念是&#xff0c;考虑到LLMs&#xff08;例如ChatGPT&#xff09;在语言理解、生成、交互和推理方面展现出了卓越的能力&…

一个优质软件测试工程师简历的范文(答应我一定要收藏起来)

很多刚转行软件测试的小伙伴是不是不知道怎么写好一份优质的软件测试工程师的简历。今天呢&#xff0c;就给大家分享一下一个优质软件测试工程师简历的范文。记得收藏起来哦。 下面的案例&#xff1a;2-3年的软件测试工程的简历 姓 名&#xff1a;XXX 学历&#xff1a;本科 …

源码解析Collections.sort ——从一个逃过单测的 bug 说起

源码解析Collections.sort ——从一个逃过单测的 bug 说起 本文从一个小明写的bug 开始&#xff0c;讲bug的发现、排查定位&#xff0c;并由此展开对涉及的算法进行图解分析和源码分析。 事情挺曲折的&#xff0c;因为小明的代码是有单测的&#xff0c;让小明更加笃定自己写的…

第四节 配置SpringBootAdmin日志管理

本来想用一节就写完SpringBootAdmin的&#xff0c;但随着研究的深入发现一节应该是不够的&#xff0c;网上的资料也不会非常系统&#xff0c;官网的例子有些已经好几年没更新了&#xff0c;所以接下来还是系统性的来写下吧 第一节 完成基础配置&#xff0c;暴露所有端点 第二节…

uniapp App强制更新

需要使用DClound插件市场的一个插件挺好用的&#xff01;app升级、整包更新和热更新组件 支持vue3 支持打开安卓、苹果应用市场&#xff0c;wgt静默更新https://ext.dcloud.net.cn/plugin?id7286 开始贴代码 // /utils/method.js/*** 获取当前app最新版本* param number ver…

【JAVA】这几个JAVA学习网站你绝不能错过(教学课程篇)

个人主页&#xff1a;【&#x1f60a;许思王】 文章目录 前言HOW2J.CNw3cschool菜鸟教程慕课网开课吧黑马程序员B站 前言 JAVA很难学&#xff1f;学不会怎么办&#xff1f;找对学习网站&#xff0c;让你轻松解决困难。 HOW2J.CN HOW2J.CN是我自认为最好的JAVA学习网站&#x…

df -h 查看Used+Avail != Size

问题描述&#xff1a; 在测试过程中发现&#xff0c;该机器的根目录空间 41G 5.7G ! 50G&#xff0c;即 Used Avail ! Size 问题原因&#xff1a; 经过搜索&#xff0c;了解到这种情况可能是Linux系统默认的文件保留块导致的&#xff08;Linux系统默认保留5%的容量作为应急…

论文 | 一分钟快速找到自己研究领域的顶刊

1. 打开Web of Science https://www.webofscience.com/wos/alldb/basic-search 2. 点击右上角&#xff1a;产品&#xff0c;再选中&#xff1a;Journal Citation Reports 至于JCR是什么&#xff0c;请看下面的拓展部分 3. 单击顶部的 Categories Categories 是分类、类别的…

LaTeX 速查手册

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

MachineLearningWu_11_NeuralNetworkLayer

x.1 Neural Network layer design 我们接下来来讲解一下深度学习中&#xff0c;神经网络是如何架构的。对于一个具有两层的的神经网络&#xff0c;我们将输入层置为layer0&#xff0c;将第一层隐藏层置为layer1&#xff0c;将 w 2 [ 1 ] w_2^{[1]} w2[1]​标记为第一层中&…

nginx基本使用

这是一份完整的nginx配置文件&#xff1a; #user nobody; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024; }http {include mi…

23款奔驰GLS450更换迈巴赫GLS600外观套件,尽显奢华

在外观上不要过分的张扬&#xff0c;低调的同时还要彰显强大的气场&#xff0c;换装迈巴赫专属套件&#xff0c;迈巴赫专属踏板&#xff0c;还有迈巴赫的醒目M标志&#xff0c;车身轮廓和线条方面&#xff0c;奔驰GLS450和迈巴赫GLS600尺寸及其契合&#xff0c;只需通过增加一些…

LayUi基础入门【附有案例从0到1详解】

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于LayUi的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.LayUi的创作背景 二.LayUi是什么 三.…

请收藏!2023年全栈开发人员实战进阶指南终极版

全栈工程师在过去十年中越来越受到欢迎&#xff0c;而且在国内的就业环境下&#xff0c;它是更适合从技术转管理的职位。 但究竟什么是全栈工程师&#xff1f;他需要哪些技术能力&#xff1f;如何才能成为一名优秀的全栈工程师&#xff1f;今天这篇文章就给大家全方位分享一下…

ES6基础语法

目录 解构 数组解构 对象解构 基本数据解构 对象 对象简写 箭头函数 扩展运算符 函数参数解构 对象API拓展 Object.is() Object.assign() Object.getPrototypeOf() Object.setPrototypeOf() Object.keys() Object.values() Object.entries() Object.fromEntries()…

Java --- 云尚优选项目

目录 一、项目工程搭建 二、配置项目相关maven依赖 2.1、cjc.ssyx父工程依赖 2.2、common模块pom依赖 2.3、common-util模块pom依赖 2.4、service-util模块pom依赖 2.5、model模块pom依赖 2.6、service模块pom依赖 三、编写相关工具类 3.1、mybatis-plus分页查询配置…

SpringMVC学习笔记一

目录 一、SpringMVC概述二、入门案例1.导入相关依赖2.配置web.xml3.配置SpringMVC4.创建测试用的html页面5.编写Controller 三、请求映射规则RequestMapping1.RequestMapping注解标识的位置2.RequestMapping注解value属性3.RequestMapping注解的method属性4.RequestMapping注解…

Vector - CANoe - 测试报告配置

目录 一、测试报告格式设置 二、测试报告格式转换 1、Test Report Viewer format 转换为 PDF 格式