美文网首页
React函数组件优化

React函数组件优化

作者: 被代码耽误的裁缝 | 来源:发表于2020-12-28 00:16 被阅读0次

主要针对于函数组件,父组件重渲染时,减少子组件不必要的渲染。

性能优化方向

1.减少重新 render 的次数

2.减少计算的量

组件重新渲染的原因

1.组件自己的状态改变

2.父组件重新渲染,导致子组件重新渲染,但是子组件的props 没有改变

3.父组件重新渲染,导致子组件重新渲染,但是子组件的 props 有改变

React.memo - 减少 render

1.基础用法
React.memo 其实就是一个高阶函数,接收一个组件为参数,返回新的组件。
在 props 不变的情况下,新的组件不会进行重渲染,对 props 的值进行浅比较。

function Component(props){
    return (
         <div>{props.name}</div>
    )
}
export default React.memo(Component)

2.高级用法
传入第二个参数 fn(prevProps,nextProps),控制 React.memo 的对比过程

function Component(props){
    return (
         <div>{props.name}</div>
    )
}
function isEqual(prevProps,nextProps){
    let notRender = arrayIsEqual(prevProps.list,nextProps.list)
    return notRender
    //notRender=true,list 属性相等,返回 true,不进行重渲染
    //arrayIsEqual是一个工具函数,用来比较两个数组是否相等
}
export default React.memo(Component,isEqual)

useCallback - 减少 render

在函数组件中,父组件重新渲染,函数、事件等将重新被创建,导致传递给子组件的 props 改变,引起不必要的 render

function Parent(){
    const hello=(){
        alert("hello")
    }
    return (
        <Child hello={hello}></Child>
    )
}

function Child(props){
    console.log(props)
    return <button onClick={props.hello}>hello</button>
}
function Parent(){
    const hello=(){
        alert("hello")
    }
    //使用 useCallback Hooks,返回回调函数的 memoized 版本,memoHello只有在依赖项有变化的时候才会更新
    const memoHello=useCallback(hello,[])
    return (
        <Child hello={memoHello}></Child>
    )
}

function Child(props){
    console.log(props)
    return <button onClick={props.hello}>hello</button>
}

useMemo - 减少计算

useMemo 做计算结果缓存,在计算函数的依赖项发生变化时,才重新调用函数计算,避免组件重新渲染时反复进行不必要的费时计算

function Child(){
    function expensiveComputedFn(){
        //大量的计算,费时的计算
        return  res
    }
    const memoRes = useMemo(expensiveComputedFn,[])
    return <div>{memoRes}</div>
}

相关文章

  • React 性能优化 - 避免重复渲染

    对于函数组件是否需要再次渲染,可以根据 React.memo 与 React.useMemo 来优化。 函数组件优...

  • 【React.js 20】React性能优化

    React性能优化 React性能优化主要分三块: React 组件性能优化 属性传递优化针对单组件性能优化,很多...

  • 优化 react: constructor:构造函数,在创建组件之前调用(1次)componentWillMoun...

  • 深入浅出React和Redux学习笔记(五)

    React组建的性能优化 性能优化的方法: 单个React组件的性能优化; 多个React组件的性能优化; 利用r...

  • React基础

    React包含react元素和react组件 react元素 react组件 react组件分为函数组件和类组件 ...

  • React Hook

    简介 :原本函数组件和类组件同为react组件,但是由于函数组件为无状态组件,react hook 的引入,让函数...

  • 最新面试集合

    react 1,react类组件和函数组件区别 函数组件:function Welcome (props) {re...

  • React 性能优化 —— 浅谈 PureComponent 组

    在谈性能优化之前,先抛出一个问题: 一个 React 组件,它包含两个子组件,分别是函数组件和 Class 组件。...

  • React_hooks

    React_hooks React16.8新增的特性,主要针对函数组件 一、函数组件和类组件的区别 函数组件的运行...

  • React学习笔记_02

    React 组件和状态 react 组件 1,组件的两种创建方式1,函数组件2,类组件 1,函数组件:使用 JS ...

网友评论

      本文标题:React函数组件优化

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