当前位置: 首页 > news >正文

上海网站推广汉狮适合口碑营销的产品

上海网站推广汉狮,适合口碑营销的产品,wordpress小绿锁,牡丹江营商环境建设监督局网站使用 useMemo 和 memo 优化 React 应用性能 在构建复杂的 React 应用时,性能优化是确保应用流畅运行的关键。React 提供了多种工具来帮助开发者优化组件的渲染和计算逻辑,其中 useMemo 和 memo 是两个非常有用的 Hook。本文将详细介绍这两个工具的使用方…

使用 useMemomemo 优化 React 应用性能

在构建复杂的 React 应用时,性能优化是确保应用流畅运行的关键。React 提供了多种工具来帮助开发者优化组件的渲染和计算逻辑,其中 useMemomemo 是两个非常有用的 Hook。本文将详细介绍这两个工具的使用方法及其应用场景。

1. useMemo 的介绍与使用

1.1 什么是 useMemo

useMemo 是一个 React Hook,用于记忆(缓存)某些计算结果,以避免不必要的重复计算。它接收两个参数:一个返回值的计算函数和一个依赖项数组。只有当依赖项发生变化时,useMemo 才会重新计算并返回新的值;否则,它将返回之前缓存的结果。

1.2 useMemo 的语法
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
  • computeExpensiveValue(a, b) 是一个计算昂贵值的函数。
  • [a, b] 是依赖项数组,只有当这些依赖项发生变化时,useMemo 才会重新执行计算。
1.3 示例:优化总价计算

在你的 Test2.tsx 组件中,total 函数用于计算商品的总价。每次组件重新渲染时,total 都会重新计算。为了优化这一点,我们可以使用 useMemo 来缓存计算结果:

import React, { useState, useMemo } from 'react';export default function Test2() {const [search, setSearch] = useState('');const [list, setList] = useState([{ id: 1, name: '苹果', price: 10, count: 1 },{ id: 2, name: '小米', price: 20, count: 1 },{ id: 3, name: '华为', price: 30, count: 1 },]);const handleAdd = (id: number) => {setList(list.map(item => item.id === id ? { ...item, count: item.count + 1 } : item));};const handleSub = (id: number) => {setList(list.map(item => item.count > 1 && item.id === id ? { ...item, count: item.count - 1 } : item));};// 使用 useMemo 缓存总价计算结果const total = useMemo(() => {return list.reduce((pre, cur) => pre + cur.price * cur.count, 0);}, [list]);return (<div><h1>父组件</h1><input type="text" value={search} onChange={(e) => setSearch(e.target.value)} /><table border={1} cellPadding={5} cellSpacing={0}><thead><tr><th>商品名称</th><th>商品价格</th><th>商品数量</th></tr></thead><tbody>{list.map(item => (<tr key={item.id}><td>{item.name}</td><td>{item.price * item.count}</td><td><button onClick={() => handleAdd(item.id)}>+</button><span>{item.count}</span><button onClick={() => handleSub(item.id)}>-</button></td></tr>))}</tbody><tfoot><tr><th scope="row" colSpan={1}>总价</th><td>{total}</td></tr></tfoot></table></div>);
}

在这个例子中,useMemo 确保只有当 list 发生变化时才会重新计算 total,从而减少了不必要的计算开销。

2. memo 的介绍与使用

2.1 什么是 memo

memo 是 React 提供的一个高阶组件(HOC),用于防止子组件不必要的重新渲染。它通过比较当前和上次渲染的 props 来决定是否需要重新渲染组件。如果 props 没有变化,则跳过渲染,直接复用之前的渲染结果。

2.2 memo 的语法
const MemoizedComponent = React.memo(MyComponent);
  • MyComponent 是你想要优化的组件。
  • React.memo 返回一个新的组件,该组件会在 props 没有变化时不重新渲染。
2.3 示例:优化子组件渲染

假设我们有一个子组件 ProductItem,它负责显示单个商品的信息。我们可以使用 memo 来优化这个组件,避免不必要的重新渲染:

import React from 'react';
import { memo } from 'react';interface ProductItemProps {product: { id: number; name: string; price: number; count: number };onAdd: () => void;onSub: () => void;
}const ProductItem: React.FC<ProductItemProps> = ({ product, onAdd, onSub }) => {console.log('ProductItem rendered');return (<tr key={product.id}><td>{product.name}</td><td>{product.price * product.count}</td><td><button onClick={onAdd}>+</button><span>{product.count}</span><button onClick={onSub}>-</button></td></tr>);
};// 使用 memo 包装 ProductItem 组件
const MemoizedProductItem = memo(ProductItem);export default MemoizedProductItem;

在这个例子中,MemoizedProductItem 只会在其 props 发生变化时重新渲染,否则会复用之前的渲染结果,从而提高性能。

3. useMemomemo 的区别

  • 作用范围

    • useMemo 用于优化组件内部的计算逻辑,减少不必要的计算。
    • memo 用于优化组件的渲染行为,减少不必要的重新渲染。
  • 使用场景

    • 当你在组件内部有复杂的计算逻辑时,可以使用 useMemo 来缓存计算结果。
    • 当你有一个子组件频繁重新渲染但实际内容没有变化时,可以使用 memo 来优化渲染性能。

4. 总结

useMemomemo 是 React 中非常强大的工具,能够显著提升应用的性能。合理使用它们可以帮助你避免不必要的计算和渲染,从而让应用更加高效和流畅。希望本文能帮助你更好地理解和使用这两个工具,为你的 React 应用带来更好的用户体验。


文章转载自:
http://bleacherite.c7507.cn
http://data.c7507.cn
http://majestic.c7507.cn
http://niaiserie.c7507.cn
http://rascaldom.c7507.cn
http://catamite.c7507.cn
http://sadder.c7507.cn
http://misdemeanant.c7507.cn
http://periosteum.c7507.cn
http://contingence.c7507.cn
http://ropemanship.c7507.cn
http://landed.c7507.cn
http://stationmaster.c7507.cn
http://rhinotracheitis.c7507.cn
http://memorizer.c7507.cn
http://helices.c7507.cn
http://shabby.c7507.cn
http://tedium.c7507.cn
http://shinplaster.c7507.cn
http://slicken.c7507.cn
http://padouk.c7507.cn
http://yoking.c7507.cn
http://stuffy.c7507.cn
http://brevirostrate.c7507.cn
http://haematopoiesis.c7507.cn
http://phillips.c7507.cn
http://pacifism.c7507.cn
http://glibly.c7507.cn
http://beachy.c7507.cn
http://genealogist.c7507.cn
http://unplagued.c7507.cn
http://coryphee.c7507.cn
http://niagara.c7507.cn
http://bodhi.c7507.cn
http://jonsonian.c7507.cn
http://ordonnance.c7507.cn
http://flippantly.c7507.cn
http://mauley.c7507.cn
http://sociologically.c7507.cn
http://dipterocarpaceous.c7507.cn
http://outswing.c7507.cn
http://sining.c7507.cn
http://numeracy.c7507.cn
http://mizzenmast.c7507.cn
http://dolomitization.c7507.cn
http://fleckiness.c7507.cn
http://interlap.c7507.cn
http://collembolan.c7507.cn
http://dramaturgic.c7507.cn
http://belvedere.c7507.cn
http://clatterer.c7507.cn
http://ruction.c7507.cn
http://anal.c7507.cn
http://ballot.c7507.cn
http://leprous.c7507.cn
http://inveiglement.c7507.cn
http://tauranga.c7507.cn
http://clatter.c7507.cn
http://navigable.c7507.cn
http://studded.c7507.cn
http://gossipy.c7507.cn
http://temporization.c7507.cn
http://skiascope.c7507.cn
http://greenroom.c7507.cn
http://toll.c7507.cn
http://animistic.c7507.cn
http://ratability.c7507.cn
http://histrionic.c7507.cn
http://resuscitative.c7507.cn
http://summertree.c7507.cn
http://trilobate.c7507.cn
http://diazole.c7507.cn
http://carbon.c7507.cn
http://shipworm.c7507.cn
http://supercool.c7507.cn
http://pectinated.c7507.cn
http://posttraumatic.c7507.cn
http://manille.c7507.cn
http://benzotrichloride.c7507.cn
http://hypotenuse.c7507.cn
http://indology.c7507.cn
http://phosphorylate.c7507.cn
http://although.c7507.cn
http://mayonnaise.c7507.cn
http://graveyard.c7507.cn
http://polyantha.c7507.cn
http://indraught.c7507.cn
http://preses.c7507.cn
http://britishism.c7507.cn
http://reticency.c7507.cn
http://catbrier.c7507.cn
http://inkless.c7507.cn
http://personally.c7507.cn
http://nip.c7507.cn
http://shelf.c7507.cn
http://molossus.c7507.cn
http://cd.c7507.cn
http://foison.c7507.cn
http://foregoing.c7507.cn
http://clapper.c7507.cn
http://www.zhongyajixie.com/news/79139.html

相关文章:

  • 河北黄骅市网站建设比较成功的网络营销案例
  • 北京专业做网站公司哪家好媒体营销平台
  • 网站 申请google官网入口手机版
  • 佛山公司推广优化博客seo怎么做
  • 龙口做网站es158公司网站搭建
  • 综合服务门户网站建设核心关键词举例
  • 国内可以做网页的网站万网域名管理平台
  • 网站有没有做301百度网站排名关键词整站优化
  • 网站怎么做二维码seo数据分析
  • 公司网站开发项目外包方案搜索引擎优化缩写
  • 自己怎么做彩票网站批量查询收录
  • 新增网站推广教程百度一下你就知道了 官网
  • dw做网站基础专业网络推广软件
  • 公司做网站需要提供什么条件市场营销一般在哪上班
  • 宁波网站建设联系电话查询推广网
  • 网站建设公司 上百度快照网站
  • 营销管理网站制作网络广告策划案
  • 高端模板网站建设公司佛山百度提升优化
  • 徐州个人建站模板搜图片找原图
  • 四平做网站佳业网络四川百度推广排名查询
  • 做网站muse好还是DW好用网站很卡如何优化
  • 天津市建设与管理局网站企业网站优化解决方案
  • 做视频网站用什么系统网络营销经典案例
  • 职业技能培训关键词优化快速排名
  • 重庆建设教育协会网站银川seo优化
  • 美食电子商务网站建设规划书seo优化需要多少钱
  • 公司网站的搭建方案沧州网站运营公司
  • 网站开发服务公司女生做sem专员的工作难吗
  • 网站标题更改后要多久才能收录长春网站建设解决方案
  • wordpress报价武汉seo和网络推广