react 性能问题和优化

某个组件更新,子组件也会一起更新
react更新采用时间切片,vue则是依赖收集
执行更新操作为16ms,如果操过16ms,先暂停更新,让浏览器先渲染
时间切片时间是16ms,因为人眼刷新率约60帧,60hz为16ms
1.避免state改为同样的值(class用PureComponent,函数组件默认已经处理了)
2.处理子组件更新(class用PureComponent,函数组件用meno)
3.子组件的props对象/方法需要注意是否会更新,基本属性不会造成更新
 
import styles from './index.less';
import { Button } from 'antd';
import React, { useCallback, useMemo, useState } from 'react';
import Son from './components/son'
let MemoSon = React.memo(Son)
const HomePage: React.FC = () => {
  let [num, setNum] = useState(0)
  // 更新num--index组件更新--重新定义obj和f1
  // let obj = {
  //   a: 1
  // }
  // function f1() {
  //   console.log(1)
  // }
  let obj = useMemo(() => {
    return {
      a: 1
    }
  }, [])
  let f1 = useCallback(() => {
    console.log(1)
  }, [])
  let a = '1'
  return (
    <div className={styles.container}>
      <h2>性能问题和优化</h2>
      <div>某个组件更新,子组件也会一起更新</div>
      <div>react更新采用时间切片,vue则是依赖收集</div>
      <div>执行更新操作为16ms,如果操过16ms,先暂停更新,让浏览器先渲染</div>
      <div>时间切片时间是16ms,因为人眼刷新率约60帧,60hz为16ms</div>
      <div>1.避免state改为同样的值(class用PureComponent,函数组件默认已经处理了)</div>
      <div>2.处理子组件更新(class用PureComponent,函数组件用meno)</div>
      <div>3.子组件的props对象/方法需要注意是否会更新,基本属性不会造成更新</div>
      <div>{num}</div>
      <Button type="primary" size="small" onClick={() => {
        setNum(num + 1)
      }}>修改数据</Button>
      {/* 会更新子组件 */}
      {/* <Son></Son> */}
      {/* 不会更新子组件 */}
      {/* <MemoSon></MemoSon> */}
      <MemoSon obj={obj} f1={f1} a={a}></MemoSon>
    </div>
  );
};



export default HomePage;

 

posted on 2024-04-08 22:03  sss大辉  阅读(25)  评论(0编辑  收藏  举报

导航