当前位置:   article > 正文

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

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

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

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

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

配合 Suspense 实现懒加载组件

  1. //App.js
  2. import { useState, Suspense, lazy } from 'react';
  3. import Loading from './Loading.js';
  4. //将 lazy 组件声明在组件外部
  5. const MarkdownPreview = lazy(() => delayForDemo(import('./MarkdownPreview.js')));
  6. export default function MarkdownEditor() {
  7. const [showPreview, setShowPreview] = useState(false);
  8. const [markdown, setMarkdown] = useState('Hello, **world**!');
  9. return (
  10. <>
  11. <textarea value={markdown} onChange={e => setMarkdown(e.target.value)} />
  12. <label>
  13. <input type="checkbox" checked={showPreview} onChange={e => setShowPreview(e.target.checked)} />
  14. Show preview
  15. </label>
  16. <hr />
  17. //MarkdownPreview 的代码只有在你尝试渲染它时才会被加载。
  18. //如果 MarkdownPreview 还没有加载完成,将显示 Loading。
  19. {showPreview && (
  20. <Suspense fallback={<Loading />}>
  21. <h2>Preview</h2>
  22. <MarkdownPreview markdown={markdown} />
  23. </Suspense>
  24. )}
  25. </>
  26. );
  27. }
  28. // 添加一个固定的延迟时间,以便你可以看到加载状态
  29. function delayForDemo(promise) {
  30. return new Promise(resolve => {
  31. setTimeout(resolve, 2000);
  32. }).then(() => promise);
  33. }
  34. //Loading.js
  35. export default function Loading() {
  36. return <p><i>Loading...</i></p>;
  37. }
  38. //MarkdownPreview.js
  39. import { Remarkable } from 'remarkable';
  40. const md = new Remarkable();
  41. export default function MarkdownPreview({ markdown }) {
  42. return (
  43. <div
  44. className="content"
  45. dangerouslySetInnerHTML={{__html: md.render(markdown)}}
  46. />
  47. );
  48. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/564173
推荐阅读
相关标签
  

闽ICP备14008679号