React Hooks學習之旅五:useMemo解決子元件重複執行問題

居安Juan發表於2020-11-19

子元件重複執行對效能損耗非常大。

在src資料夾下新建Example7.js:

import React, { useState } from 'react';
function Example7(){
    const [xiaohong,setXiaohong] = useState('小紅在代課狀態');
    const [zhiling,setZhiling] = useState('志玲在代課狀態');
    return (
        <>
            <button onClick={()=>{setXiaohong(new Date().getTime())}}>小紅</button>
            <button onClick={()=>{setZhiling(new Date().getTime()+'志玲向我們走來')}}>志玲</button>
            <ChildComponent name={xiaohong}>{zhiling}</ChildComponent>
        </>
    )
}

function ChildComponent({name,children}){
    function changeXiaohong(){
        console.log('她來了她來了,小紅向我們走來了');
        return name+',小紅向我們走來了';
    }

    const actionXiaohong = changeXiaohong();

    return (
        <>
            <div>{actionXiaohong}</div>
            <div>{children}</div>
        </>
    )
}

export default Example7;

執行效果:

可以發現當點選'志玲'時也會呼叫changeXiaohong方法。

使用useMemo優化效能

在Example.js中引入useMemo,給changeXiaohong新增執行條件:

import React, { useState,useMemo } from 'react';
/**表示只有當name發生變化時才執行changeXiaohong方法,這裡的name就是xiaohong */
const actionXiaohong = useMemo(()=>changeXiaohong(),[name]);

執行效果:

可以發現當點選'志玲'時不會再執行changeXiaohong方法了。

相關文章