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

广州海珠网站制google搜索引擎

广州海珠网站制,google搜索引擎,2023年最新新闻简短摘抄,洛阳建设部官方网站1.useMemo缓存计算结果,缓存函数const memoizedValue useMemo(() > computeExpensiveValue(a, b), [a, b]);参数​​:接受一个函数(返回需要缓存的值)和一个依赖数组(依赖项变化时重新计算)。​​返回值…

1.useMemo缓存计算结果,缓存函数

const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
  • 参数​​:接受一个函数(返回需要缓存的值)和一个依赖数组(依赖项变化时重新计算)。

  • ​返回值​​:返回函数计算的值,依赖未变化时直接复用缓存。

核心场景:

  • ​昂贵计算​​:对大量数据排序、过滤、复杂数学运算等,避免每次渲染都重新计算。

    const sortedList = useMemo(() => { 
    return bigData.sort((a, b) => a.value - b.value); // 大数据排序}, [bigData]);

  • ​引用稳定性​​:当需要将一个对象/数组作为 props 传递给子组件(且子组件用 React.memo优化时),避免因每次渲染生成新引用导致子组件无效更新。

    const config = useMemo(() => ({ timeout: 1000, retry: 3 }), []); 
    // 配置对象保持引用不变

    2.useCallback缓存函数

  • const memoizedCallback = useCallback(() => doSomething(a, b), [a, b]);
  • 参数​​:接受一个函数(需要缓存的函数)和一个依赖数组(依赖项变化时重新创建函数)。

  • ​返回值​​:返回缓存的函数实例,依赖未变化时复用之前的函数。

​核心场景​​:
  • ​子组件优化​​:当函数作为 props 传递给子组件(尤其是用 React.memo包裹的子组件)时,避免因函数引用变化导致子组件不必要的重新渲染。

  • const handleClick = useCallback(() => {console.log('Button clicked', count);
    }, [count]); // 依赖 count,count 变化时才更新函数return <MemoizedChild onClick={handleClick} />; // MemoizedChild 用 React.memo 包裹

    ​避免闭包陷阱​​:在定时器、事件监听等异步场景中,确保函数引用稳定,避免捕获到过期的状态。

    useEffect(() => {const timer = setInterval(() => {console.log('Current value:', stableValue); // 使用稳定的函数引用}, 1000);return () => clearInterval(timer);
    }, [stableValue]);

  • 区别

3. ​​依赖管理复杂​

2. ​​合理使用 React.memo 配合​

  • 如果你需要 ​​缓存一个计算结果​​(比如过滤后的列表、格式化后的数据),用 useMemo

  • 如果你需要 ​​缓存一个函数​​(比如传递给子组件的回调),用 useCallback

  • ​本质上,useCallback 是 useMemo 的一种特例​​(当缓存的函数返回值是函数本身时,两者可互换,但语义更清晰)。

  • 三、滥用 useMemo/useCallback 的问题

    1. ​​性能反而下降​

  • ​额外开销​​:useMemo和 useCallback本身需要维护缓存逻辑,​​首次渲染时会有额外的计算/创建成本​​,且依赖项变化时需要对比依赖数组。如果缓存的值或函数本身计算成本很低(比如简单的加法、返回常量),使用它们反而会增加不必要的复杂度。

  • // ❌ 滥用:计算简单,无优化必要 
    const doubled = useMemo(() => num * 2, [num]); // num * 2 是简单计算,直接写 num * 2 更清晰 
    const handleClick = useCallback(() => { setCount(count + 1); // 简单函数,无子组件依赖,直接定义即可 }, [count]);

  • 2. ​​代码可读性降低​

  • ​过度优化​​:滥用会导致代码中充斥大量 useMemo/useCallback,增加维护成本和理解成本。

  • ​掩盖真正问题​​:过度依赖缓存可能掩盖组件设计不合理(如子组件未合理拆分、状态管理混乱)的本质问题。

  • ​依赖数组错误​​:如果依赖项遗漏或错误(比如漏掉某个依赖),会导致缓存失效(useMemo重新计算,useCallback重新创建函数),引发 bug。而错误的依赖管理比直接重新计算/创建函数的代价更高。

    // ❌ 错误示例:漏掉依赖 count,导致函数内使用过期的 
    count const handleClick = useCallback(() => { 
    console.log(count); // 若 count 是依赖但未声明,这里可能拿到旧值 }
    , []); // 漏了 [count]
    

    四、最佳实践建议

    1. ​​优先考虑代码可读性与维护性​

  • ​默认不使用​​:大多数情况下,直接写普通函数或计算逻辑更清晰,除非有明确的性能瓶颈或引用稳定性需求。

  • ​按需使用​​:仅在以下场景使用:

    • 子组件用 React.memo优化,且需要稳定函数引用(用 useCallback)。

    • 计算逻辑复杂且依赖项变化频繁(用 useMemo)。

    • 需要避免闭包陷阱(如定时器、事件监听中的函数)。

  • ​子组件优化​​:如果子组件是纯展示组件(props 变化才重新渲染),用 React.memo包裹,再配合 useCallback缓存回调函数,才能真正减少渲染。

  • const Child = React.memo(({ onClick }) => {console.log('Child 渲染'); // 仅当 onClick 引用变化或 props 变化时渲染return <button onClick={onClick}>点击</button>;
    });function Parent() {const handleClick = useCallback(() => {console.log('点击事件');}, []); // 依赖为空,函数引用永远不变return <Child onClick={handleClick} />;
    }

http://www.dtcms.com/a/472375.html

相关文章:

  • 深圳网站建设推广方案做app的网站
  • 网站开发合同网络推广招聘
  • 公司微信网站建设方案模板加盟教育培训机构
  • 合肥网站建设百姓网临沂兰山网站建设
  • 能够给上市公司做网站意味着什么徐州人才网最新招聘2021
  • 沈阳网站建设小工作室网站建设后台功能模块
  • 成都网站建设多少费用财经直播的网站开发一个多少钱
  • 广州网站建设哪家便宜中国数据网
  • 瓯北网站制作公司农业 网站源码
  • 上海网站建设空间制作wordpress静态首页
  • 怎么优化网站网站页面那个图怎么做
  • mysql数据做彩票网站在哪里可以免费自学seo课程
  • 如何改wordpress网站图标如何弄一个自己的小程序
  • 想学会网站建设要会什么装修3d效果图怎么制作
  • ps做网站界面金马国旅网站建设分析
  • 儿童做的小游戏下载网站网站的建设费用预算策划书
  • 六种常见的网站类型帮他人做视频网站违法吗
  • 蛋糕网站内容规划wordpress widget logic
  • python - 第二天
  • 罗湖商城网站建设哪家服务周到wordpress快速注册
  • 河北手机响应式网站建设设计创意产品设计及介绍
  • 怎么建立简单网站高端酒店网站模板
  • 网站备案单位查询系统百度推广售后服务电话
  • 企业网站定制网站备案被删除
  • 做付费网站自己的网站怎么做关键词优化
  • 重庆永川网站建设建设网站的申请信用卡分期付款
  • 做报名网站北京网站seo优化推广
  • 社保网站是每月1-6号都是在建设中的吗互联网金融p2p网站建设模板
  • 网站备案准备资料建设一个网站的流程
  • 做网站 视频山东建站管理系统