当前位置: 首页 > news >正文

React 之 lazy(延迟加载)(十七)

lazy 能够让你在组件第一次被渲染之前延迟加载组件的代码。

在组件外部调用 lazy,以声明一个懒加载的 React 组件:

import { lazy } from 'react';const MarkdownPreview = lazy(() => import('./MarkdownPreview.js'));

配合 Suspense 实现懒加载组件

//App.js
import { useState, Suspense, lazy } from 'react';
import Loading from './Loading.js';
//将 lazy 组件声明在组件外部
const MarkdownPreview = lazy(() => delayForDemo(import('./MarkdownPreview.js')));export default function MarkdownEditor() {const [showPreview, setShowPreview] = useState(false);const [markdown, setMarkdown] = useState('Hello, **world**!');return (<><textarea value={markdown} onChange={e => setMarkdown(e.target.value)} /><label><input type="checkbox" checked={showPreview} onChange={e => setShowPreview(e.target.checked)} />Show preview</label><hr />
//MarkdownPreview 的代码只有在你尝试渲染它时才会被加载。
//如果 MarkdownPreview 还没有加载完成,将显示 Loading。{showPreview && (<Suspense fallback={<Loading />}><h2>Preview</h2><MarkdownPreview markdown={markdown} /></Suspense>)}</>);
}
// 添加一个固定的延迟时间,以便你可以看到加载状态
function delayForDemo(promise) {return new Promise(resolve => {setTimeout(resolve, 2000);}).then(() => promise);
}//Loading.js
export default function Loading() {return <p><i>Loading...</i></p>;
}//MarkdownPreview.js
import { Remarkable } from 'remarkable';
const md = new Remarkable();
export default function MarkdownPreview({ markdown }) {return (<divclassName="content"dangerouslySetInnerHTML={{__html: md.render(markdown)}}/>);
}

http://www.lryc.cn/news/349261.html

相关文章:

  • Node.js -- 会话控制
  • 做抖店不能踩的几个坑,新手要照做,老玩家要听劝~
  • 【Kibana】快速上手Kibana平台(KQL)
  • 全方位入门git-慕课网 笔记
  • 使用 Docker 部署 TaleBook 私人书籍管理系统
  • 分布式系统的一致性与共识算法(一)
  • 创建一个Spring Boot项目
  • ansible -playbook运维工具、语法、数据结构、命令用法、触发器、角色
  • web前端之sass中的颜色函数、active按钮激活、hover鼠标悬浮、disabled禁用、scss循环、css
  • 交通地理信息系统实习教程(二)
  • Shell脚本——批量清理Kubernetes集群中Evicted状态的pod
  • (深度估计学习)Win11复现DepthFM
  • cocos creator 帧率60 不生效meta50 能刷新到90
  • 探讨 cs2019 c++ 的STL 库中的模板 conjunction 与 disjunction
  • 【核弹】我的第一款IDEA插件
  • 【工作篇】软件工程师的知识基础(持续更新)
  • 知识付费系统开源方案,教育机构如何利用朋友圈做转介绍?
  • c++20 std::reinterpret_cast、std::bit_cast、std::static_cast
  • PHP单独项目启动演示
  • vscode 通过ssh 远程执行ipynb +可以切换conda env
  • ASP.NET银行大厅自助信息系统的开发与实现
  • 学习Vue3中reactive
  • 【Transformer-BEV编码(10)】CVPR2021 PYVA 第一个明确提到 cross-attention decoder可用于视图转BEV
  • nestJs中跨库查询
  • Java编程思想
  • 数组(Java)
  • 接口自动化测试框架搭建
  • (四十二)第 6 章 树和二叉树(树的二叉链表(孩子-兄弟)存储)
  • 测试萌新Python学习(五)接口自动化测试requests
  • Python 机器学习 基础 之 监督学习 [朴素贝叶斯分类器] / [决策树] 算法 的简单说明 / [graphviz] 绘制决策树