当前位置:首页 > React

react缓存如何解决

2026-01-24 21:25:08React

React 缓存解决方案

使用 React.memo 缓存组件

React.memo 是一个高阶组件,用于缓存函数组件的渲染结果。当组件的 props 未发生变化时,直接返回上一次的渲染结果。

const MemoizedComponent = React.memo(function MyComponent(props) {
  return <div>{props.value}</div>;
});

使用 useMemo 缓存计算结果

useMemo 用于缓存计算结果,避免在每次渲染时重新计算。适用于复杂计算或依赖项未变化的情况。

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

使用 useCallback 缓存函数

useCallback 用于缓存函数引用,避免在每次渲染时创建新的函数。适用于将函数作为 props 传递给子组件的情况。

react缓存如何解决

const memoizedCallback = useCallback(() => {
  doSomething(a, b);
}, [a, b]);

使用 useRef 缓存可变值

useRef 可以缓存可变值,且不会触发重新渲染。适用于存储不需要触发渲染的变量。

const ref = useRef(initialValue);
ref.current = newValue;

使用 Context 和状态管理库

通过状态管理库(如 Redux、MobX)或 React Context 缓存全局状态,避免不必要的状态传递和重复计算。

react缓存如何解决

const ThemeContext = React.createContext('light');
function App() {
  return (
    <ThemeContext.Provider value="dark">
      <Toolbar />
    </ThemeContext.Provider>
  );
}

使用第三方缓存库

第三方库如 swrreact-query 可以高效地缓存数据请求,减少重复请求。

import useSWR from 'swr';
function Profile() {
  const { data, error } = useSWR('/api/user', fetcher);
  if (error) return <div>failed to load</div>;
  if (!data) return <div>loading...</div>;
  return <div>hello {data.name}!</div>;
}

优化列表渲染

对于列表渲染,使用 key 属性和虚拟滚动(如 react-window)减少不必要的 DOM 操作。

import { FixedSizeList as List } from 'react-window';
function MyList() {
  return (
    <List
      height={150}
      itemCount={1000}
      itemSize={35}
      width={300}
    >
      {({ index, style }) => <div style={style}>Item {index}</div>}
    </List>
  );
}

避免内联对象和函数

内联对象和函数会导致子组件不必要的重新渲染,应尽量避免。

// 不推荐
<ChildComponent style={{ color: 'red' }} onClick={() => {}} />

// 推荐
const style = useMemo(() => ({ color: 'red' }), []);
const onClick = useCallback(() => {}, []);
<ChildComponent style={style} onClick={onClick} />

分享给朋友:

相关文章

vue实现缓存视频

vue实现缓存视频

Vue 实现视频缓存的方法 在 Vue 中实现视频缓存可以通过多种方式完成,包括使用浏览器的缓存机制、Service Worker 或者借助第三方库。以下是几种常见的方法: 使用 Service…

vue实现组件缓存

vue实现组件缓存

Vue 组件缓存的实现方法 在 Vue 中实现组件缓存通常使用 <keep-alive> 内置组件,它可以缓存不活动的组件实例,避免重复渲染和销毁。 基本用法 <keep-ali…

vue实现图片缓存

vue实现图片缓存

实现图片缓存的方案 在Vue项目中实现图片缓存可以通过多种方式,以下列举几种常见且有效的方法: 使用Service Worker缓存图片 通过注册Service Worker实现离线缓存,利用Cac…

vue实现路由缓存

vue实现路由缓存

Vue 路由缓存实现方法 在 Vue 项目中,可以通过 keep-alive 组件和路由配置实现页面缓存,避免重复渲染和保持组件状态。 使用 keep-alive 包裹路由视图 在根组件或布局组件中…

vue回退实现缓存

vue回退实现缓存

Vue 回退实现缓存的方法 在Vue应用中,实现回退时保持页面缓存可以通过<keep-alive>组件和路由配置结合实现。以下是具体方法: 使用 <keep-alive> 缓…

vue路由实现缓存

vue路由实现缓存

Vue 路由实现缓存的常用方法 使用 <keep-alive> 组件 在 Vue 中可以通过 <keep-alive> 组件缓存路由组件,避免重复渲染。需要将 <keep…