子组件重复执行对性能损耗非常大。
在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方法了。