
- ReactJS 教程
- ReactJS - 首页
- ReactJS - 简介
- ReactJS - 路线图
- ReactJS - 安装
- ReactJS - 功能特性
- ReactJS - 优势与劣势
- ReactJS - 架构
- ReactJS - 创建 React 应用
- ReactJS - JSX
- ReactJS - 组件
- ReactJS - 嵌套组件
- ReactJS - 使用新创建的组件
- ReactJS - 组件集合
- ReactJS - 样式
- ReactJS - 属性 (props)
- ReactJS - 使用属性创建组件
- ReactJS - props 验证
- ReactJS - 构造函数
- ReactJS - 组件生命周期
- ReactJS - 事件管理
- ReactJS - 创建一个事件感知组件
- ReactJS - 在 Expense Manager 应用中引入事件
- ReactJS - 状态管理
- ReactJS - 状态管理 API
- ReactJS - 无状态组件
- ReactJS - 使用 React Hooks 进行状态管理
- ReactJS - 使用 React Hooks 的组件生命周期
- ReactJS - 布局组件
- ReactJS - 分页
- ReactJS - Material UI
- ReactJS - Http 客户端编程
- ReactJS - 表单编程
- ReactJS - 受控组件
- ReactJS - 非受控组件
- ReactJS - Formik
- ReactJS - 条件渲染
- ReactJS - 列表
- ReactJS - Keys
- ReactJS - 路由
- ReactJS - Redux
- ReactJS - 动画
- ReactJS - Bootstrap
- ReactJS - Map
- ReactJS - 表格
- ReactJS - 使用 Flux 管理状态
- ReactJS - 测试
- ReactJS - CLI 命令
- ReactJS - 构建和部署
- ReactJS - 示例
- Hooks
- ReactJS - Hooks 简介
- ReactJS - 使用 useState
- ReactJS - 使用 useEffect
- ReactJS - 使用 useContext
- ReactJS - 使用 useRef
- ReactJS - 使用 useReducer
- ReactJS - 使用 useCallback
- ReactJS - 使用 useMemo
- ReactJS - 自定义 Hooks
- ReactJS 高级
- ReactJS - 可访问性
- ReactJS - 代码分割
- ReactJS - Context
- ReactJS - 错误边界
- ReactJS - 转发 Refs
- ReactJS - Fragments
- ReactJS - 高阶组件
- ReactJS - 与其他库集成
- ReactJS - 性能优化
- ReactJS - Profiler API
- ReactJS - Portals
- ReactJS - 无 ES6 ECMAScript 的 React
- ReactJS - 无 JSX 的 React
- ReactJS - 调和
- ReactJS - Refs 和 DOM
- ReactJS - Render Props
- ReactJS - 静态类型检查
- ReactJS - Strict Mode
- ReactJS - Web Components
- 其他概念
- ReactJS - 日期选择器
- ReactJS - Helmet
- ReactJS - 内联样式
- ReactJS - PropTypes
- ReactJS - BrowserRouter
- ReactJS - DOM
- ReactJS - 走马灯
- ReactJS - 图标
- ReactJS - 表单组件
- ReactJS - 参考 API
- ReactJS 有用资源
- ReactJS - 快速指南
- ReactJS - 有用资源
- ReactJS - 讨论
ReactJS - cache() 函数
在 React 18 中,有一个名为“cache 函数”的新特性。此函数会记住当传递特定输入时发生的情况。因此,如果我们在 React 中处理某些内容时使用相同的函数和相同的参数,它不会重复执行任务。相反,它将快速返回记住的结果,从而节省用户的时间和资源。这类似于我们的计算机记住某些内容以便更高效地执行操作。
语法
const cachedFunc = cache(func);
参数
func − func 是一个可以执行某些任务的函数,它可以使用我们提供的任何类型的信息。
返回值
当我们使用此缓存版本的函数和特定输入时,它会检查是否已为这些输入存储了结果。如果已存储,则会直接返回结果,而无需再次运行函数。但如果没有存储结果,则会使用这些输入运行原始函数,将结果保存在其内存中,然后返回该结果。因此,原始函数仅在缓存中没有保存结果时才运行。
示例
示例
以下是如何在 React 18 中使用 cache 函数的示例。在此示例中,我们将创建一个简单的缓存来计算数字的平方。
import { cache } from 'react'; // Calculate the square of a number and cache the result export const square = cache(async (num) => { console.log(`Calculating the square of ${num}`); return num * num; }); const result1 = await square(5); // Calculate and cache the result const result2 = await square(5); // Return the memoized (cached) result console.log(result1); // Calculating the square of 5, 25 console.log(result2); // 25 (No recalculation, just returns the cached result) // Use the square function const result3 = await square(3); // This will calculate and cache the result. console.log(result3); // Output: Square of 3, 9
在此示例中,我们创建了一个 square 函数,该函数计算并缓存数字的平方。当我们在相同的渲染过程中使用相同的输入(例如,5)调用它时,它会返回缓存的结果,从而减少了重新计算的需要。当我们再次使用不同的输入(例如,3)调用它时,它会计算并缓存一个新的结果。
示例 - 使用 cache 避免重复工作
这是另一个显示在 React 中使用 cache 函数的示例:
cache 函数用于保存名为 calculateProductStats 函数的结果。cache 创建的 getProductStats 方法用于收集各种商品的统计数据。
ProductDetails 组件使用 GetProductStats 获取单个产品的的数据,而 SalesDetails 组件使用它来获取报表中多个商品的数据。这展示了我们如何根据需要将记忆化应用于各种方法和组件。
import { cache } from 'react'; import calculateProductStats from 'lib/product'; const getProductStats = cache(calculateProductStats); function ProductDetails({product}) { const stats = getProductStats(product); // write code here } function SalesDetails({products}) { for (let product in products) { const stats = getProductStats(product); // write code here } // write code here }
如果 ProductDetails 和 SalesReport 中都显示了相同的 product 对象,则这两个组件可以共享工作,并且只需为该产品调用一次 calculateProductStats。
假设 ProductDetails 是第一个被渲染的。它将调用 getProductStats 并查看是否存在缓存结果。由于这是第一次使用该产品调用 getProductStats,因此将发生缓存未命中。然后,getProductStats 将使用该产品调用 calculateProductStats 并将结果保存到缓存中。
当 SalesReport 生成其产品列表并到达相同的 product 对象时,它将调用 getProductStats 并从缓存中读取结果。
示例 - 预加载数据
假设我们正在创建一个网页,并且需要从数据库中获取一些数据以在网页上显示。此数据提取可能需要一些时间。我们可以使用新的 cache 函数,甚至在我们不需要数据之前就开始在后台获取数据。
这是一个示例:
假设我们有一个 getUser 函数,该函数从数据库中收集用户的 数据。即使在我们不需要用户数据之前,我们也可以通过在 Page 组件中执行 getUser(id) 来开始获取它。在数据检索发生的同时,我们可以在组件中执行其他操作。
然后通过在 Profile 组件中再次调用 getUser 来获取用户信息。如果 Page 组件的初始调用已经获取并缓存了用户数据,则 Profile 组件可以使用该缓存数据,而不是执行另一次缓慢的数据库访问。这会加快页面速度,因为它最大限度地减少了获取数据的等待时间。
import { cache } from 'react'; import fetchProductDetails from 'api/products'; const getProductDetails = cache(async (productId) => { return await fetchProductDetails(productId); }); function ProductInfo({ productId }) { // Fetch product details getProductDetails(productId); return ( <div> <h2>Product Information</h2> {getProductDetails(productId).description} </div> ); }
在此示例中,我们有一个 ProductInfo 组件,它使用 cache 函数开始在后台接收产品详细信息。这样,当我们需要数据时,它已经在缓存中,从而减少了在页面上显示产品信息所需的时间。
局限性
在处理 React 中的服务器请求时,每次进行新的服务器请求时,都会清除所有记忆化函数的缓存结果(缓存)的内存存储。
每次我们使用 cache 函数时,都会创建一个新的、不同的函数。因此,如果我们多次使用相同的原始函数调用 cache,我们会收到单独的记忆化函数,并且这些记忆化函数不共享相同的保存结果的内存存储。
错误也会被 cache 提供的记忆化函数记住。如果原始函数为任何输入返回错误,则该错误将保存在内存中。结果,使用相同的输入使用记忆化函数将导致相同的错误,而无需重新运行该函数。
重要的是,cache 方法仅用于 React 中称为“服务器组件”的部分。它并非用于应用程序的其他部分。
总结
“cache 函数”是 React 18 中添加的一个新特性,它允许开发人员根据声明的输入轻松存储和检索函数的结果。这可以节省重复计算并通过快速返回缓存的结果来提高效率,从而节省重复计算,提高效率。