美文网首页
React拆分组件的最佳实践?

React拆分组件的最佳实践?

作者: 莫帆海氵 | 来源:发表于2022-04-28 17:37 被阅读0次

目前常用的做法使用 React 的 lazy 和 suspence 在组件维度实现拆分资源包。

lazy + Suspence

import React, { lazy, Suspense } from "react"

const Header = lazy(() => import("./components/Header"))

const MyHi = () => {
    return(
        ...
        <Suspense fallback={null}>
            <Header />
        </Suspense>
        ...
    )
}

为什么拆分组件?

减少请求资源的大小,让首屏能更快渲染

拆分前 拆分后

从上图能看到 activity_full_refund_new 的资源拆分后减少 6KB,新增三个独立资源 0、1、2

拆分的标准

简单的做法就是每个组件都拆分,这样拆分问题,如果每个组件都拆分会有许多琐碎的资源,首次渲染的时间可能很快,但界面依然是空白的,还是需要等待组件的资源加载完成才能看到组件的,所以需要区分一下哪些组件可以拆分?

可以拆分的组件标准:

  1. 首屏不会加载的
  2. 非重要内容(1信息不重要、2不会影响 layout 造成重绘)
  3. 对比页面来说是重的组件,比如占用资源达到页面的一部分(25%?)

示例

import React, { lazy, Suspense } from "react"
import ReactDOM from "react-dom"

// 首屏组件
import Header from "./components/Header"
// 重组件
const GoodsBody = lazy(() => import("./components/GoodsBody"))
// 非重要组件
const GuidePopup = lazy(() => import("./components/GuidePopup"))
// 非重要组件
const RuleButton = lazy(() => import("components/RuleButton"))

...
render() {
    let {
      remaining_times,
    } = this.state

    return (
      <div className="container">
        <Header remainingTimes={remaining_times} />
        <Suspense fallback={null}>
          <GoodsBody
            goodsList={goods_list}
          />
        </Suspense>
        <Suspense fallback={null}>
          <GuidePopup />
        </Suspense>
        <Suspense fallback={null}>
          <RuleButton backgroundColor="#d35c3b" />
        </Suspense>
      </div>
    )
  }
}
...

结果截图


第一次仅渲染 Header 组件 等待 GoodsBody 资源加载后渲染 接着等待 GuidePopup 资源加载后渲染 最后是 RuleButton 组件 当因为父组件状态更新,三个 Suspense 都重新渲染

推荐每个组件都是用单独的 Suspense 包裹,可以单独渲染,如果多个组件使用一个 Suspense,其下面的所有组件是同时渲染,如果子组件没做好状态控制容易造成多次渲染。

一个 Suspense 下面的多个组件都会同时渲染

相关文章

  • React拆分组件的最佳实践?

    目前常用的做法使用 React 的 lazy 和 suspence 在组件维度实现拆分资源包。 lazy + Su...

  • React开发相关资料

    React-Router 中文简明教程 总结 React 组件的三种写法 及最佳实践 [涨经验] React-UI组件

  • React 组件性能优化

    React 组件性能优化最佳实践 React 组件性能优化的核心是减少渲染真实 DOM 节点的频率,减少 Virt...

  • react学习文档

    通过实例,学习编写 React 组件的“最佳实践”https://zhuanlan.zhihu.com/p/278...

  • RN:React-Redux

    目录一. React-Redux是什么 1. React-Redux的组件拆分规范  1.1 UI组件  1.2 ...

  • react与smarty的比较

    使用react的感触 react可以对组件进行拆分,所以我感觉react组件对页面整体依赖性不大,以前用smart...

  • 编写React组件的最佳实践

    此文翻译自这里。 当我刚开始写React的时候,我看过很多写组件的方法。一百篇教程就有一百种写法。虽然React本...

  • React

    React优点 组件化将一个应用拆分为组件的形式再进行组合,而对于每个组件来说,将应用状态和DOM进行拆分,最终提...

  • react 整体疑问

    组件该如何拆分react 相关 什么时候选择react-hooks react生命周期 哪些will被替换 g...

  • React Learning(Day2)(2019.7.6)

    React Learning(Day2)(2019.7.6) 日常挤牙膏 一、拆分组件与组件之间的传值 1.父组件...

网友评论

      本文标题:React拆分组件的最佳实践?

      本文链接:https://www.haomeiwen.com/subject/ifqsfrtx.html