当前位置:首页 > React

react如何减少渲染

2026-02-26 03:37:38React

减少 React 渲染的方法

使用 React.memo 进行组件记忆
React.memo 可以对函数组件进行浅比较,避免不必要的重新渲染。适用于 props 变化较少的组件。

const MyComponent = React.memo(function MyComponent(props) {
  /* 渲染逻辑 */
});

合理使用 useMemo 和 useCallback
useMemo 缓存计算结果,useCallback 缓存函数引用,避免因引用变化导致的子组件重渲染。

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

避免在渲染函数中进行复杂计算
将复杂计算移至 useEffect 或 useMemo 中,减少每次渲染时的计算开销。

// 不推荐
function Component({ items }) {
  const filteredItems = items.filter(item => item.isActive);
  return <List items={filteredItems} />;
}

// 推荐
function Component({ items }) {
  const filteredItems = useMemo(() => items.filter(item => item.isActive), [items]);
  return <List items={filteredItems} />;
}

优化状态更新
合并多个状态更新,减少渲染次数。使用函数式更新确保依赖最新状态。

react如何减少渲染

const [state, setState] = useState({ count: 0, name: 'John' });

// 不推荐
setState({ ...state, count: state.count + 1 });
setState({ ...state, name: 'Doe' });

// 推荐
setState(prev => ({ ...prev, count: prev.count + 1 }));
setState(prev => ({ ...prev, name: 'Doe' }));

使用 shouldComponentUpdate(类组件)
在类组件中通过 shouldComponentUpdate 手动控制渲染逻辑。

class MyComponent extends React.Component {
  shouldComponentUpdate(nextProps, nextState) {
    return nextProps.value !== this.props.value;
  }
  render() {
    return <div>{this.props.value}</div>;
  }
}

避免内联函数和对象
内联函数和对象会导致每次渲染时生成新的引用,触发子组件重渲染。

react如何减少渲染

// 不推荐
<Child onClick={() => handleClick()} />

// 推荐
const handleClick = useCallback(() => { /* 逻辑 */ }, []);
<Child onClick={handleClick} />

使用 React.lazy 和 Suspense 进行代码分割
通过懒加载减少初始渲染的组件数量,提升性能。

const OtherComponent = React.lazy(() => import('./OtherComponent'));

function MyComponent() {
  return (
    <Suspense fallback={<div>Loading...</div>}>
      <OtherComponent />
    </Suspense>
  );
}

使用虚拟化长列表
对于长列表,使用 react-window 或 react-virtualized 仅渲染可见部分。

import { FixedSizeList as List } from 'react-window';

const Row = ({ index, style }) => (
  <div style={style}>Row {index}</div>
);

const Example = () => (
  <List height={150} itemCount={1000} itemSize={35} width={300}>
    {Row}
  </List>
);

避免不必要的 Context 更新
将 Context 拆分为多个独立 Context,减少因单一 Context 变化导致的全局重渲染。

const ThemeContext = React.createContext('light');
const UserContext = React.createContext();

function App() {
  return (
    <ThemeContext.Provider value="dark">
      <UserContext.Provider value={{ name: 'John' }}>
        <Content />
      </UserContext.Provider>
    </ThemeContext.Provider>
  );
}

使用生产环境构建
生产环境的 React 构建版本会自动启用性能优化(如压缩、删除警告等)。确保部署时使用生产模式。

标签: react
分享给朋友:

相关文章

react如何收录

react如何收录

React 收录方法 React 的收录主要涉及搜索引擎优化(SEO)和预渲染技术。由于 React 是单页应用(SPA),默认情况下内容由 JavaScript 动态生成,可能导致搜索引擎爬虫难以收…

如何用react

如何用react

使用React的基本步骤 安装Node.js和npm 确保系统已安装Node.js和npm。Node.js自带npm,可从官网下载安装包。安装完成后,通过命令行验证版本: node -v npm -…

如何启动react

如何启动react

安装Node.js 确保系统已安装Node.js(建议使用LTS版本),可通过官网下载并安装。安装完成后,在终端运行以下命令验证版本: node -v npm -v 创建React项目 使用官方工…

react项目如何

react项目如何

创建React项目 使用create-react-app工具快速初始化项目。确保已安装Node.js(建议版本≥12.0.0),运行以下命令生成新项目: npx create-react-app m…

react如何debugger

react如何debugger

调试 React 应用的方法 使用浏览器开发者工具进行调试 React 开发者工具(React DevTools)是调试 React 应用的必备工具。安装 Chrome 或 Firefox 扩展后,可…

react如何通信

react如何通信

React 组件通信方式 React 组件间的通信方式多样,具体选择取决于组件关系和场景需求。以下是常见方法: 父子组件通信 父组件通过 props 向子组件传递数据,子组件通过回调函数通知父…