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

在电商网站上做推广的技巧郑州建设局

在电商网站上做推广的技巧,郑州建设局,网页制作成品,做企业网站服务商一、useMemo 基本用法: useMemo 是 React 提供的一个 Hook,用于性能优化,它通过"记忆"(memoization)计算结果来避免在每次渲染时进行不必要的复杂计算。 const memoizedValue useMemo(() > computeExpensiveValue…

一、useMemo 基本用法:

useMemo 是 React 提供的一个 Hook,用于性能优化,它通过"记忆"(memoization)计算结果来避免在每次渲染时进行不必要的复杂计算。

const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);

  主要作用:

  1. 避免重复计算
    当组件重新渲染时,useMemo 会检查依赖项数组中的值是否发生变化,只有当依赖项变化时,才会重新执行计算函数,否则直接返回之前缓存的值
  2. 优化渲染性能
    对于计算量大的操作,使用 useMemo 可以显著提高性能,避免在每次渲染时都执行昂贵的计算
  3. 保持引用稳定
    当返回对象或数组时,useMemo 可以保持引用不变(除非依赖项变化),这对于传递给子组件的 props 特别有用,可以避免不必要的子组件重新渲染

  使用场景:

   1. 复杂计算
function ExpensiveComponent({ a, b }) {const result = useMemo(() => {// 复杂的计算过程return a * b + Math.pow(a, b) - a / b;}, [a, b]); // 只有当a或b变化时才重新计算return <div>{result}</div>;
}
   2. 优化子组件渲染
function ParentComponent({ items }) {const processedItems = useMemo(() => {return items.map(item => ({...item,fullName: `${item.firstName} ${item.lastName}`}));}, [items]); // 只有当items变化时才重新处理return <ChildComponent items={processedItems} />;
}
   3. 避免不必要的对象/数组创建
function FormComponent({ onSubmit }) {const formConfig = useMemo(() => ({initialValues: { username: '', password: '' },validate: values => {const errors = {};if (!values.username) errors.username = 'Required';return errors;}}), []); // 空依赖数组表示只创建一次return <Form {...formConfig} onSubmit={onSubmit} />;
}

  注意事项:

  1. 不要滥用
    useMemo 本身也有性能开销,只对真正昂贵的计算或需要稳定引用的值使用
  2. 依赖数组
    确保包含所有在计算函数中使用的外部值,遗漏依赖项会导致 bug
  3. 不是语义保证
    React 可能在将来选择"忘记"某些记忆化的值,不要依赖 useMemo 来实现业务逻辑的正确性
  4. 与 React.memo 的区别
    useMemo 记忆的是值,React.memo 记忆的是组件

二、useCallback 基本用法:

  主要作用:

useCallback 是 React 提供的用于性能优化的 Hook,它的主要作用是缓存函数引用,避免不必要的函数重新创建。

  使用场景:

1. 当函数作为依赖项时
// 不使用 useCallback - 每次渲染都会创建新函数,导致 useEffect 重复执行
const fetchData = () => { /*...*/ };
useEffect(() => {fetchData();
}, [fetchData]); // 依赖项每次都会变化// 使用 useCallback - 只有依赖变化时才创建新函数
const fetchData = useCallback(() => {/*...*/
}, [dependency]); // 只有当 dependency 变化时才重新创建函数
2. 当函数作为 props 传递给优化过的子组件时
// 子组件用 React.memo 优化过
const Child = React.memo(({ onClick }) => {/*...*/
});function Parent() {// 不使用 useCallback - 每次渲染都会导致 Child 重新渲染const handleClick = () => { /*...*/ };// 使用 useCallback - 避免 Child 不必要的重新渲染const handleClick = useCallback(() => {/*...*/}, []); // 空依赖表示函数永不变化return <Child onClick={handleClick} />;
}
3. 在自定义 Hook 中返回稳定函数时
function useCounter() {const [count, setCount] = useState(0);// 返回稳定的函数引用const increment = useCallback(() => setCount(c => c + 1), []);const decrement = useCallback(() => setCount(c => c - 1), []);return { count, increment, decrement };
}

  具体使用时机

  1. 函数被包含在依赖数组(如 useEffectuseMemouseCallback 的依赖数组)中时

  2. 函数作为 prop 传递给用 React.memo 优化的子组件

  3. 函数被用作上下文值且会被多个组件使用时

  4. 函数被多次创建且创建成本较高时(虽然这种情况较少见)

  不需要使用 useCallback 的情况

  1. 函数不参与任何依赖关系(没有作为 prop 传递,不在依赖数组中)
  2. 函数定义非常简单且创建成本极低
  3. 组件本身很少重新渲染

三、useMemo与 useCallback 的关系:

 useCallback(fn, deps) 相当于 useMemo(() => fn, deps),两者都用于性能优化,但:

  1. useMemo 用于记忆计算结果
  2. useCallback 专门用于记忆函数
​// 这两个是等价的
const memoizedCallback = useCallback(() => doSomething(a, b), [a, b]);
const memoizedCallback = useMemo(() => () => doSomething(a, b), [a, b]);


文章转载自:

http://AHC8F8h2.yhywr.cn
http://Ad9I8FDZ.yhywr.cn
http://SQ2CXPyB.yhywr.cn
http://KVFBZpu4.yhywr.cn
http://JUgsHoHv.yhywr.cn
http://l4gNdyzn.yhywr.cn
http://UdhC6Zef.yhywr.cn
http://jOsiTGUU.yhywr.cn
http://ZlAUzAqM.yhywr.cn
http://2QKJvAfN.yhywr.cn
http://7MBlZv1j.yhywr.cn
http://dFQZMNZZ.yhywr.cn
http://LHMPXyrH.yhywr.cn
http://SZjIEaot.yhywr.cn
http://iEHA8oup.yhywr.cn
http://pNVEDzAv.yhywr.cn
http://fsqxFG9o.yhywr.cn
http://Em7W3B0s.yhywr.cn
http://m0G2etxj.yhywr.cn
http://U0rqGLRd.yhywr.cn
http://iaRi7PHU.yhywr.cn
http://AILVRqNb.yhywr.cn
http://OsknxwbF.yhywr.cn
http://TusaSHZ1.yhywr.cn
http://XY74GALN.yhywr.cn
http://wyNPVkbH.yhywr.cn
http://DEUoH6ET.yhywr.cn
http://bfiaXDaw.yhywr.cn
http://Pd1vKuWz.yhywr.cn
http://rtfRiZv9.yhywr.cn
http://www.dtcms.com/wzjs/615440.html

相关文章:

  • 82家合法现货交易所名单苏州推广关键词优化
  • 360街景地图最新版肇庆seo推广公司
  • 门户网站和微网站的区别并且图片越大越好
  • 聊天网站怎么建设wordpress缓存删除了有什么后果
  • 做电池的有哪些网站广东省网站备案注销
  • 贷款网站建设wordpress问卷调查插件
  • pdf 网站建设wordpress开启多站点功
  • 中国建设银行征信网站企业邮箱app下载
  • 多语言做网站重庆网站seo外包
  • 保定外贸网站制作建设工程的招标网站有哪些
  • seo 能提高网站速度吗做免费网站有哪些
  • 简洁大方的电商网站模板优化方案怎么写
  • 专门做影评的网站可以做水果的团购网站
  • 关于网站备案的公告怎样做投资与理财网站
  • 网站手机版模板免费下载做网站站长
  • 运行一个网站的成本广州网站优化关键词方法
  • 网站设计风格类型wordpress插件买免费
  • 网站开发需求报告个人网站推广方法
  • 用dreamware做网站wordpress用户推广插件
  • 亚马逊做图片链接的网站做超市海报的网站
  • 最受欢迎的建站平台公司网站的用途
  • 郴州网站设计公司个人网站设计论文范文
  • 互助平台网站制作浏览器在线进入
  • 湛江建站公司网站开发服务费会计分录
  • 网站建设php带数据库模板北京专业做网站的
  • 北京免费网站建设玉溪网站网站建设
  • 主机屋网站空间的IP网页设计培训 周末双休
  • 东莞网站建设品牌wordpress 论坛偷笑
  • 花店网站建设个人小结深圳建设集团有限公司好吗
  • 营销型网站建设优势快手小程序