react路由懒加载lazy直接使用组件标签引发的问题?

news2024/12/28 2:25:50

文章

  • 前言
  • 错误场景
  • 解决方案
  • 问题分析
  • 后言

前言

✨他们是天生勇敢的开发者,我们创造bug,传播bug,毫不留情地消灭bug,在这个过程中我们创造了很多bug以供娱乐。
✨ 这里是前端的一些bug 感兴趣的可以看看前端bug

错误场景

在react18+ts+vite项目中设置路由懒加载出现的问题
bug的类型:Uncaught Error
bug的提示:A component suspended while responding to synchronous input. This will cause the UI to be replaced with a loading indicator. To fix, updates that suspend should be wrapped with startTransition.

上代码

// 路由表写法
// 路由懒加载
import React, {lazy} from "react";
import Home from "@/views/Home"

const About = lazy(() => import("@/views/About"))

import {Navigate} from "react-router-dom";

// 报错:A component suspended while responding to synchronous input. This will cause the UI to be replaced with a loading indicator. To fix, updates that suspend should be wrapped with startTransition.
// 懒加载的模式

const routes = [
    {
        path: "/",
        element: <Navigate to="/home"/>
    },
    {
        path: "/home",
        element: <Home></Home>
    },
    {
        path: "/about",
        element: <About></About>
    },
]

export default routes

报错
在这里插入图片描述

解决方案

把需要路由懒加载的地方加上

<React.Suspense fallback={<div>Loading...</div>}>
	<About></About>
</React.Suspense>

ok了解决了 要是还感兴趣可以往下看

问题分析

React.Suspense

React.Suspense是React中的一个组件,用于在加载动态组件时显示加载状态或错误处理。它可以与React.lazy一起使用,以实现按需加载组件并在加载期间显示指定的加载界面。
React.lazy是React 16.6版本引入的特性,它使得可以按需地(懒加载)导入和渲染组件。这对于大型应用程序来说非常有用,可以减少初始加载时间和资源消耗。

然而,由于JSX语法的限制,无法直接在React.lazy中使用标签形式。JSX要求在编译时就能够静态地分析出组件的依赖关系,以便正确地进行打包和优化。但是,使用标签形式无法在编译时确定要渲染的组件,因为组件的选择是在运行时动态决定的。

为了解决这个问题,React提供了React.Suspense组件。通过将React.lazyReact.Suspense一起使用,我们可以在加载懒加载组件时显示指定的加载界面。当懒加载组件正在加载时,React.Suspense可以显示一个自定义的加载状态,例如loading动画、提示信息等。当加载完成时,React.Suspense会自动渲染出被懒加载的组件。

使用React.SuspenseReact.lazy的组合,可以更好地管理代码的拆分和按需加载,提供更好的用户体验和性能优化。它使得在需要时才加载和渲染组件成为可能,从而减少了初始加载时间和资源消耗。

后言

创作不易,要是本文章对广大读者有那么一点点帮助 不妨三连支持一下,您的鼓励就是博主创作的动力

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

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

相关文章

K8S删除资源后一直处于Terminating状态无法删除解决方法

原因 使用kubectl delete 删除某命名空间是一直处于Terminating状态无法删除&#xff0c;首先排查了该命名空间下是否还存在deployment pod等资源发现没有后&#xff0c;等了很久还是无法删除后发现是因为该名称空间的“finalizers”字段有值导致 Finalizer&#xff08;终结器…

从单模态到多模态,自主AI离我们还有多远?

一、从AI的诞生和发展说起 人工智能的发展&#xff0c;从思想诞生上&#xff0c;可以追逐到十七世纪的帕斯卡和莱布尼茨&#xff0c;1666年&#xff0c;德国博学家戈特弗里德威廉莱布尼茨发表了一篇题为《论组合的艺术》的神秘论文。当时的莱布尼茨只有20岁&#xff0c;他概述了…

HarmonyOS开发:开源一个刷新加载组件

前言 系统Api中提供了下拉刷新组件Refresh&#xff0c;使用起来也是非常的好用&#xff0c;但是风格和日常的开发&#xff0c;有着巨大的出入&#xff0c;效果如下&#xff1a; 显然上面的效果是很难满足我们实际的需求的&#xff0c;奈何也没有提供的属性可以更改&#xff0c;…

Qt实现的自定义登录框连接MySQL(完整的实现过程)

一.开始创建项目 1.创建Qt窗口应用项目: 2.输入文件名、选择项目将要保存的地址 3.构造系统选择qmake 4.类名使用默认的就好,点击继续完成项目的创建 5.创建好的项目如下 二.创建一个资源管理文件 三.创建一个登录对话框窗口 1.选择一个ui界面类 2.选择Dialog without Butt…

【字符指针等_例题详解】

文章目录 前言例题一 &#xff1a;下面关于“指针”的描述不正确的是例题二&#xff1a;下面代码描述正确的是例题三&#xff1a;关于数组指针描述正确的是例题四&#xff1a;下面哪个是数组指针例题五&#xff1a; 下面哪个是函数指针例题六&#xff1a; 定义一个函数指针&…

python实现Excel自动化办公

准备工作 安装相关模块 pip install openpyxl lxml pillow 基本定义 工作簿&#xff1a;一个电子表文件为一个工作簿 活动表&#xff1a;用户当前查看的表活关闭Excel最后查看的表 sheet表 单元格 Excel数据读取操作 打开工作簿并创建一个对象&#xff1a; wb openpyxl.loa…

【2021ICPC沈阳】EFBJHL

不知道为什么感觉以前的场要比现在的简单一点&#xff0c;虽然这场VP虽然题数到了但是还是差点罚时.... 现在的有些场感觉连签到都要签半天&#xff0c;比如前几天的ICPC西安和CCPC桂林&#xff0c;看了下题都不简单 这场甚至银牌题都没什么思维&#xff0c;只需要算法的板子…

mmcv中出现TypeError: FormatCode() got an unexpected keyword argument ‘verify‘

最近安装Co-DETR项目环境时遇到如下的问题 主要是因为最新版的yapf&#xff08;0.40.2&#xff09;中删除了verify的验证功能 将其降级为旧版即可&#xff1a; pip install yapf0.40.0

照片去文字水印怎么弄?这三个方法快学起来

照片去文字水印怎么弄&#xff1f;你有没有遇到过这样的烦恼呢&#xff1f;我经常在网上找一些好看的照片来做头像或者壁纸&#xff0c;但是总是遇到一些带水印或者不想要的文字的照片&#xff0c;影响了整体的美观度让人很头疼&#xff0c;每次重新找又得花费不少时间和精力&a…

真心话坦白局系统源码

它具有匿名信息的神秘感 但又会给你一点小提示 能让你有无限挖掘下去的好奇感 也能让你说出那些不敢说出口的话 敢来一场坦白局吗&#xff01; 坦白局这个功能类似于悄悄话&#xff0c;只不过是匿名的悄悄话。 有时候我们有些话是开不了口的&#xff0c;坦白局给了我们一个…

每日汇评:黄金多头重回2000美元,接下来会发生什么?

受地缘政治因素影响&#xff0c;金价守住了上周五2000美元上方的强劲涨幅&#xff1b; 美元持稳&#xff0c;因为美国债券市场的行动是美联储本周的关键&#xff1b; 由于可能出现牛十字&#xff0c;黄金价格有望进一步上涨&#xff0c;牛旗仍在图表中延续&#xff1b; 继上周五…

vue3 vue3-particles粒子使用方法

注意&#xff1a;这个vue3-particles和particles.vue3有些许差别的&#xff08;安装、引入方式&#xff09; particles.vue3示例&#xff1a;vue3 使用particles插件粒子_vueparticles_余温无痕的博客-CSDN博客 下面是vue3-particles使用介绍 先看效果&#xff0c;背景图是自…

Qt3D绘制旋转立方体

近期用了款叫DesktopSpace&#xff0c;也想实现一下这款软件实现的效果 具体实现步骤: 使用Qt3D绘制个旋转的立方体&#xff08;一&#xff09;使用快捷键控制立方体显示面&#xff08;二&#xff09;创建6个人虚拟桌面&#xff0c;截取不同虚拟桌面&#xff0c;显示在不同的面…

15、SpringCloud -- 延迟消息、异步下单失败处理方案

目录 延迟消息需求理解:思路:代码:发送延迟消息消费延迟消息:1、订单支付状态:2、回补真实库存:3、回补预库存:4、修改本地标识:测试:清除MQ数据:期望结果:实际结果:问题:异步下单失败需求1:代码:发送消息:消费消息:测试:需求2:延迟消息 需求理解: 用户成…

从制造到创造:揭示中国制造的基础瓶颈及其突破

中国制造的产品遍布全球&#xff0c;但很多人认为中国制造的产品缺乏基础&#xff0c;这是为什么呢&#xff1f;本文将从制造的基础入手&#xff0c;探讨中国制造缺乏基础的原因。 一、制造的基础 制造的基础是工艺&#xff0c;工艺的基础包括三个方面&#xff1a;基础材料的研…

如何将word格式的文档转换成markdown格式的文档

如何将word格式的文档转换成markdown格式的文档 前言 A. 介绍Markdown和Word格式文档 什么是Markdown&#xff1f; Markdown是一种轻量级标记语言&#xff0c;旨在简化文本格式化和排版的过程。它以纯文本形式编写&#xff0c;通过使用简单的标记语法&#xff0c;使文档更具…

HarmonyOS开发:基于http开源一个网络请求库

前言 网络封装的目的&#xff0c;在于简洁&#xff0c;使用起来更加的方便&#xff0c;也易于我们进行相关动作的设置&#xff0c;如果&#xff0c;我们不封装&#xff0c;那么每次请求&#xff0c;就会重复大量的代码逻辑&#xff0c;如下代码&#xff0c;是官方给出的案例&am…

0003net程序设计-net旅游景点推荐系统

文章目录 摘 要目录系统设计开发环境 摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#…

【IDEA】设置sql提示

第一步&#xff1a;注入SQL语言 1.首先选择任意一条sql语句&#xff0c;右击&#xff0c;选择 ‘显示上下文操作’ 2.选择 ‘注入语言或引用’ 3. 往下翻&#xff0c;找到MySQL 第二步&#xff1a;配置MySQL数据库连接 1.首先点击侧边的数据库&#xff0c;再点击上面的加号 2…

antv/g6使用教程及图配置

介绍 G6 是一款由蚂蚁金服 AntV 团队开发的 JavaScript 图形引擎&#xff0c;用于构建各种交互式可视化图形&#xff0c;包括但不限于图表、网络拓扑图、关系图、流程图等。无论是数据分析、决策支持&#xff0c;还是信息可视化&#xff0c;G6 都是一个强大的工具。 以下是 G…