当前位置:首页 > React

react闭包实现缓存

2026-01-27 12:40:44React

使用闭包实现缓存的原理

在React中利用闭包特性可以实现缓存功能,核心思想是通过函数作用域保留变量状态。闭包能让函数访问其定义时的词法环境,即使函数在其他地方执行。

react闭包实现缓存

基础闭包缓存实现

function createCache() {
  const cache = {};

  return function(key, value) {
    if (value !== undefined) {
      cache[key] = value; // 设置缓存
    }
    return cache[key]; // 获取缓存
  };
}

const cache = createCache();
cache('name', 'Alice'); // 设置
console.log(cache('name')); // 获取

React组件中的缓存优化

在函数组件中使用useMemo和useCallback结合闭包:

react闭包实现缓存

import React, { useMemo, useCallback } from 'react';

function ExpensiveComponent({ data }) {
  const memoizedData = useMemo(() => {
    const cache = {};
    return (key) => {
      if (!cache[key]) {
        console.log('计算新值');
        cache[key] = expensiveCalculation(data, key);
      }
      return cache[key];
    };
  }, [data]);

  return <div>{memoizedData('someKey')}</div>;
}

自定义Hook实现

创建可复用的缓存Hook:

function useCache() {
  const cacheRef = React.useRef(new Map());

  const getCache = useCallback((key) => {
    return cacheRef.current.get(key);
  }, []);

  const setCache = useCallback((key, value) => {
    cacheRef.current.set(key, value);
  }, []);

  return { getCache, setCache };
}

// 使用示例
function MyComponent() {
  const { getCache, setCache } = useCache();
  // ...
}

带过期时间的缓存

扩展基础缓存实现自动清理:

function createTimedCache(ttl) {
  const cache = {};

  return function(key, value) {
    const now = Date.now();
    if (value !== undefined) {
      cache[key] = { value, expires: now + ttl };
    }

    const entry = cache[key];
    if (entry && entry.expires > now) {
      return entry.value;
    }
    delete cache[key];
    return undefined;
  };
}

性能优化建议

缓存实现应考虑内存管理,避免无限增长。在React中建议结合useRef保持缓存引用稳定,同时利用useMemo/useCallback避免不必要的重新计算。对于复杂场景可以考虑使用成熟的缓存库如lru-cache。

标签: 缓存react
分享给朋友:

相关文章

react中monent如何获取日期

react中monent如何获取日期

使用 Moment.js 获取日期 在 React 项目中,可以通过 Moment.js 库轻松处理日期和时间。以下是几种常见的日期获取方法。 安装 Moment.js 确保项目中已安装 Mome…

react 如何引入css

react 如何引入css

在 React 中引入 CSS 的方法 React 提供了多种引入 CSS 的方式,可以根据项目需求选择合适的方法。以下是常见的几种方式: 内联样式 内联样式直接在组件中通过 style 属性定义,…

react如何销毁

react如何销毁

销毁 React 组件 在 React 中,销毁组件通常涉及清理副作用(如事件监听器、定时器或订阅)以防止内存泄漏。以下是实现组件销毁的常见方法: 使用 useEffect 清理副作用 在函数组件…

react native 如何

react native 如何

React Native 开发基础 React Native 是一个用于构建跨平台移动应用的框架,允许开发者使用 JavaScript 和 React 编写代码,同时生成原生 iOS 和 Androi…

如何选购react

如何选购react

选购 React 相关产品或服务的建议 React 是一个用于构建用户界面的 JavaScript 库,广泛应用于前端开发。以下是选购 React 相关产品(如课程、书籍、工具、组件库等)的参考方法:…

react如何衰减

react如何衰减

React 中的动画衰减效果实现 在 React 中实现衰减效果(如滚动衰减、拖动释放后的惯性滑动)通常需要结合物理动画原理或第三方动画库。以下是几种常见方法: 使用 CSS 动画和 @keyfra…