3.useCallback+useMemo+memo性能优化场景使用
注意:hooks只能在函数(无状态组件)中使用
当父组件引入子组件的情况下,往往会造成组件之间的一些不必要的浪费,下面我们通过例子来了解一下场景
3.1创建一个test.tsx文件,我们拷贝上篇博客的useState的案例
import React, {
useState } from 'react';
function Test() {
const [count, setCount] = useState<number>(100);
return (
<>
<h2>{
count}</h2>
<button onClick={
() => setCount(count + 1)}>++</button>
{
/* 引入子组件 */}
<TestChild/>
</>
)
}
export default Test;
//创建一个子组件
function TestChild(): JSX.Element {
console.log('TestChild运行了?');
return(
<h3>我是子组件</h3>
);
}
这时我们开启服务运行一下这个小案例,会发现,我们的子组件并没有对应的需要更新的操作但是还是触发了,这时候我们需要使用React的memo来优化一下代码
3.2使用memo优化react性能
import React, {
useState,memo } from 'react';
//在TestChild子组件使用之前,使用memo包裹一下
const MemoTestChild = memo(TestChild);//对子组件进行处理
function Test() {
const [count, setCount] = useState<number>(100);
return (
<>
<h2>{
count}</h2>
<button onClick={
() => setCount(count + 1)}>++</button>
{
/* 引入子组件 */}
{
/* <TestChild/> */}
<MemoTestChild/>
</>
)
}
export default Test;
//创建一个子组件
function TestChild(): JSX.Element {
console.log('TestChild运行了?');
return(
<h3>我是子组件</h3>
);
}
这时我们看一下会不会产生上述的问题
从上面可以看出,除了初始化的执行之外,这时候父组件发生状态的改变,子组件不会发生对应的重新执行,优化了代码的性能,个人建议多使用这些性能优化的函数,以提高性能