当前位置:首页 » 《随便一记》 » 正文

React-性能优化(不用memo)

24 人参与  2022年12月20日 18:57  分类 : 《随便一记》  评论

点击全文阅读


React性能优化--未必memo

React-性能优化(不用memo)Round One 状态下沉Round Two 内容提升

React-性能优化(不用memo)

相信大家在使用React时,经常会遇到页面出现重复渲染的情况,有时候,可能渲染的数据不多,从视觉上感觉不到性能的消耗,但是有时候却很尴尬,比如渲染一个可编辑的列表,当列表的行数稍微有点的多的时候,你随便在页面上面更新一下跟列表无关的state,都有可能会导致卡顿一会,这就是页面在渲染的同时,导致列表也重新渲染了,but,我压根就不想它这时候渲染啊?肿么办?
如果熟悉hooks,这时候第一想到的应该是useMemo,没错,套上它,虽然超薄,防护却是杠杠的,只是是不是每次都得套上useMemo才觉得安全呢?这也未必,先去取个经再说,oh no,是取个女儿国国王再说!

下面这段代码,你会发现其中端倪,不想它动,它非要动。。。
import React, { useState } from "react";const ExpensiveComponent = () => {  let now = performance.now();  while (performance.now() - now < 100) {    // 这是G点,就是需要关注的点!容易乱动的地方    console.log(performance.now());  }  return <p>这是一个让人崩溃的组件</p>;};const PerformanceOptimizationsComponent = () => {  const [color, setColor] = useState("blue");  return (    <div>       <div style={{color}}>my color</div>       <input type="text" value={color} onChange={(e) => {         setColor(e.target.value)       }}/>       <ExpensiveComponent/>   </div>  );};

Round One 状态下沉

所谓状态下沉,就是把需要更新的状态,下沉到独立的子组件中,这样的话,子组件的状态变更,不会影响到兄弟组件,更不会影响到父组件,既然你不老实,就拔出来,给你套上金刚罩,看你还敢不敢三心二意了。废话不多,上活。

更改后
import React, { useState } from "react";const Form = () => {  const [color, setColor] = useState("blue");  return (    <>      <div style={{ color }}>my color</div>      <input type="text" value={color} onChange={(e) => {        setColor(e.target.value);      }}/>    </>  );};const ExpensiveComponent = () => {  let now = performance.now();  while (performance.now() - now < 100) {    // G点不到,就淡定了。    console.log(performance.now());  }  return <p>这是一个让人崩溃的组件</p>;};const PerformanceOptimizationsComponent = () => {  return (    <div>      <Form/>      <ExpensiveComponent/>    </div>  );};export default PerformanceOptimizationsComponent;

Round Two 内容提升

当一部分state在高开销树的上层代码中使用时上述解法就无法奏效了。举个栗子,如果我们将color放到父元素div中。
----:靠,这比新冠变异变的还快,放开还是管控?

import React, { useState } from "react";const ExpensiveComponent = () => {  let now = performance.now();  while (performance.now() - now < 100) {    // 直接举手投降     console.log(performance.now());  }  return <p>这是一个让人崩溃的组件</p>;};const PerformanceOptimizationsComponent = () => {  const [color, setColor] = useState("blue");  return (   <div style={{color}}>       <div>my color</div>       <input type="text" value={color} onChange={(e) => {         setColor(e.target.value)       }}/>       <ExpensiveComponent/>   </div>  );};export default PerformanceOptimizationsComponent;
last 修改后
import React, { useState } from "react";const ExpensiveTree = () => {  let now = performance.now();  while (performance.now() - now < 100) {    // 再来一次!    console.log(performance.now());  }  return <p>放过我吧!~</p>;};const Last = ({ children }) => {  const [color, setColor] = useState("blue");  return (    <div style={{ color }}>      <div>my color</div>      <input type="text" value={color} onChange={(e) => {        setColor(e.target.value);      }}/>      {children}    </div>  );};const PerformanceOptimizationsComponent = () => {  return (    <Last>      <ExpensiveTree/>    </Last>  );};export default PerformanceOptimizationsComponent;

貌似没用上memo,也解决了这些令人蛋疼的事情!~


点击全文阅读


本文链接:http://zhangshiyu.com/post/50053.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 掉马后,前任跪求我的特种兵司机放过他超长版_苏振邦陈明苏微微爆火全网_小说后续在线阅读_无删减免费完结_
  • 比赛那天,他为青梅将我绑架抽血无广告_贺擎盛夏小姐节选_小说后续在线阅读_无删减免费完结_
  • 春尽人不归结局阮彦初骆澜月完本_春尽人不归结局(阮彦初骆澜月)
  • 独家姜甜甜无删减(农家福星:捡来的奶团旺全家)(姜甜甜)TXT免费版阅读
  • 最后一页没说再见晋江金榜_时砚江疏桐桐桐无错版_小说后续在线阅读_无删减免费完结_
  • 体检前,我放任所有体育生误食兴奋剂小众冷门_赵津川沈梦青梅后续+番外_小说后续在线阅读_无删减免费完结_
  • 热门章节_笔趣阁(前路漫漫,承担了无数梦想)前路漫漫,承担了无数梦想小说(谢鹤书萧清禾)章节在线阅读
  • 农家福星:捡来的奶团旺全家姜甜甜小说无删减阅读无干扰(姜甜甜)番外+续集
  • 宋颜泽江晚吟续集(宋颜泽江晚吟)终极反转(雾隐繁花情已逝)全篇一口气阅读
  • 女儿玩了一百次云霄飞车,老公和童颜芭比coser嗨爆鬼屋小众冷门_老公云霄飞车祁晓筱快手热门_小说后续在线阅读_无删减免费完结_
  • 在品茶大会承认我是废物后,假千金却急了最新章节_白露露露露付凌逸校园甜文_小说后续在线阅读_无删减免费完结_
  • 完结文我们终将背叛命运+后续列表_完结文我们终将背叛命运+后续(温妤陆北屿)

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1