5.React.memo 性能优化

性能优化, React.memo

1. 函数组件修改同一个值,不会重新渲染.类组件会setState会重新渲染
(当响应式数据没有发生改变时候, 更新时不会重新执行, 不会重新render随机数没有变)
html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style></style>
  <script src="../react.development.js"></script>
  <script src="../react-dom.development.js"></script>
  <script src="../babel.min.js"></script>
  <script src="../lodash.min.js"></script>
</head>

<body>
  <div id="app"></div>
  <script type="text/babel">
    /* 
    性能优化, React.memo
    1. 函数组件修改同一个值,不会重新渲染.类组件会setState会重新渲染
    (当响应式数据没有发生改变时候, 更新时不会重新执行, 不会重新render随机数没有变)

    2. React.memo类似纯组件,可提高组件性能表现(类组件PureComponent)
    当传递的值发生改变,重新render,当没有发生改变不重新render .
    加Math.random(),验证
    */

    let app = document.querySelector('#app');
    let root = ReactDOM.createRoot(app);
    let { useState } = React;

    // 不重新Render
    let Welcome = (props) => {  
      const [ count, setCount ] = useState(0);
      const handleClick= () => {
        setCount(1);
      }
      console.log(123);
      return (
        <div>
          <button onClick={handleClick}>点击</button>
          hello Welcome { Math.random() }
        </div>
      );
    }
    
    let element = (
      <Welcome />
    );
    root.render(element);
  </script>
</body>

</html>

2. React.memo类似纯组件,可提高组件性能表现(类组件PureComponent)

当传递的值发生改变,重新render,当没有发生改变不重新render .
加Math.random(),验证
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script src="../react.development.js"></script>
  <script src="../react-dom.development.js"></script>
  <script src="../babel.min.js"></script>
</head>
<body>
  <div id="app"></div>
  <script type="text/babel">

    let app = document.querySelector('#app');
    let root = ReactDOM.createRoot(app);
    let { useState } = React;

    let Welcome = (props) => {  
      const [ count, setCount ] = useState(0);
      const handleClick= () => {
        setCount(1);
      }
      return (
        <div>
          <button onClick={handleClick}>点击</button>
          hello Welcome
          <Head count={count} />
        </div>
      );
    }

    // 不包裹,每次都更新
    // 包裹,依赖更新时候才会更新
    let Head = React.memo(() => {
      return (
        <div>hello Head, { Math.random() }</div>
      )
    })
    
    let element = (
      <Welcome />
    );
    root.render(element);


  </script>
</body>
</html>
相关推荐
一路向前的月光几秒前
React(11)路由demo
javascript·react.js·ecmascript
七灵微28 分钟前
【前端】简单原生实例合集html,css,js
前端·css·html
祈澈菇凉28 分钟前
2025年React Hooks的进阶面试题130题及其答案解析..
前端·react.js·前端框架
小王码农记28 分钟前
【天地图-点线面最全功能】天地图实现功能:回显、绘制、编辑、删除任意点线面
javascript
Neo Evolution36 分钟前
每天一个Flutter开发小项目 (6) : 表单与验证的专业实践 - 构建预约应用
android·开发语言·前端·javascript·flutter
大橙子房39 分钟前
AI学习第六天-python的基础使用-趣味图形
前端·python·学习
bigyoung1 小时前
JavaScript 中判断一个对象中是否存在相同的 `value`
javascript
小金子J1 小时前
Vue 表单优化:下拉框值改变前的确认提示与还原逻辑实现
前端·javascript·vue.js·elementui
web150854159352 小时前
Nginx 配置前端后端服务
运维·前端·nginx
AC-PEACE2 小时前
JSX基础 —— 识别JS表达式
开发语言·javascript·react.js