首页 > web前端 > js教程 > React 基础知识~渲染性能/ useCallback

React 基础知识~渲染性能/ useCallback

Linda Hamilton
发布: 2024-10-16 22:44:02
原创
714 人浏览过
  • 即使将备忘录设置为子组件,子组件仍然可以重新渲染。

  • 这是一种我们将函数作为 props 传递给子组件的情况。

・src/Example.js

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

import React, { useCallback, useState } from "react";

import Child from "./Child";

 

const Example = () => {

  console.log("Parent render");

 

  const [countA, setCountA] = useState(0);

  const [countB, setCountB] = useState(0);

 

  const clickHandler = () => {

    setCountB((pre) => pre + 1);

  };

 

  return (

    <div className="parent">

      <div>

        <h3>Parent component</h3>

        <div>

          <button

            onClick={() => {

              setCountA((pre) => pre + 1);

            }}

          >

            button A

          </button>

          <span>Update parent component</span>

        </div>

      </div>

      <div>

        <p>The count of click button A:{countA}</p>

      </div>

      <Child countB={countB} onClick={clickHandler} />

    </div>

  );

};

 

export default Example;

登录后复制

・src/Child.js

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

import { memo } from "react";

 

const ChildMemo = memo(({ countB, onClick }) => {

  console.log("%cChild render", "color: red;");

 

  return (

    <div className="child">

      <h2>Child component</h2>

      <div>

        <button onClick={onClick}>button B</button>

        <span>Uodate child component</span>

      </div>

      <span>The count of click button B :{countB}</span>

    </div>

  );

});

 

export default ChildMemo;

登录后复制
  • 子组件重新渲染的原因是因为src/Example.js中的clickHandler函数

1

2

3

const clickHandler = () => {

  setCountB((pre) => pre + 1);

};

登录后复制
  • 此函数作为 onClick 属性传递给子组件。

1

<Child countB={countB} onClick={clickHandler} />

登录后复制
  • 如果我们用 useCallback 包装子组件,我们可以避免这种情况。

1

2

3

const clickHandler = useCallback(() => {

  setCountB((pre) => pre + 1);

}, []);

登录后复制

React Basics~Render Performance/ useCallback

React Basics~Render Performance/ useCallback

以上是React 基础知识~渲染性能/ useCallback的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板