React如何优化减少组件间的重新Render

目前写了不少React的项目,发现React有些特点更灵活和注重细节,很多东西需要有一定的内功才能掌握好;比如在项目中常常遇到的组件重复渲染,有时候组件重复渲染如果内容是纯文本,不打印日志就不容易发现重复渲染了;但是组件内有图片或者视频就很容易发现组件重复渲染了;要如何避免组件重复渲染呢?

下面我们看下代码代码,组件命名比较随意哈:

// App.js
import { useState } from 'react';
import Hello from './components/Hello';

function App() {
  const [count, setCount] = useState(0)
  const handleCount = () => {
    setCount((count) => ++count )
  }
  return (
   <div className="App">
      <header className="App-header">
        <main>
          <button onClick={handleCount}>Click me</button>
          父组件内容 {count}
          <Hello />
          <Hello1 />
        </main>
      </header>
    </div>
  );
}

export default App;

// hello.js
import { memo } from "react"
const Hello = () => {
  console.log('reload1')
  return (
    <div>
      子组件1是否打印更新
    </div>
  )
}

export default memo(Hello);
// hello1.js
import { memo,useEffect, useState } from "react"

const Hello = () => {
  const [count, setCount] = useState(0)
  const handleCount1 = () => {
    setCount((count) => ++count )
  }
  console.log('reload2')
  return (
    <div>
        子组件2是否打印更新
        <br />
        <button onClick={handleCount1}>子组件2++</button>
        <br />
        子组件2的内容 {count}
        <br />
    </div>
  )
}

export default memo(Hello);

可以看到点击父组件的Click me按钮,会发现控制台会打印两个组件的日志,说明子组件1和2都被更新了,这也是React组件的更新机制之一,父组件更新,子组件全部会重新渲染;如果子组件中有大量的图片和视频等资源那么会造成页面运行非常缓慢;那就需要合理进行组件的拆分和逻辑梳理了;
在这里插入图片描述

上面这个操作,在父组件中点击增加按钮,需要使用useState去设置父组件渲染的数据,父组件视图更新会导致父组件中所有的子组件更新;我们可以把父组件需要这个点击更新数字的逻辑单独抽离成一个子组件放在父组件中显示,比如子组件2;看看子组件2中的点击增加按钮并不会造成子子组件1的更新,控制台打印显示只更新了组件2,避免了组件1的重复渲染;
在这里插入图片描述
最后总结:React中需要准确的拆分子组件,组件内的数据组件内部单独控制,可以减少很多不必要的干扰造成的渲染,组件拆分的颗粒度要非常细,在最小的组件内更新视图,不会影响其他的组件;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值