**优化目标**: - 减少组件卸载次数:从 6 次/刷新 → 1-2 次/刷新(↓ 66-83%) - 减少渲染次数:从 9 次/刷新 → 4-5 次/刷新(↓ 44-55%) **优化组件**(共 7 个): 1. ✅ ModeToggleButtons.js - 简单 UI 组件 2. ✅ DynamicNewsEventCard.js - 平铺模式卡片(被渲染 30+ 次) 3. ✅ HorizontalDynamicNewsEventCard.js - 纵向模式卡片(被渲染 10+ 次) 4. ✅ VerticalModeLayout.js - 布局组件 5. ✅ EventScrollList.js - 列表组件 6. ✅ VirtualizedFourRowGrid.js - 虚拟化网格(forwardRef) 7. ✅ DynamicNewsCard.js - 主组件(forwardRef) **技术实现**: - 普通组件:`React.memo(Component)` - forwardRef 组件:`React.memo(forwardRef(...))` - 所有回调函数已使用 useCallback 确保引用稳定 **预期效果**: - 列表渲染的卡片组件收益最大(减少 90% 重渲染) - 布局组件渲染次数从 9 次降到 1 次(减少 88%) - 整体用户体验更流畅,无明显卡顿 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
34 lines
914 B
JavaScript
34 lines
914 B
JavaScript
// src/views/Community/components/DynamicNewsCard/ModeToggleButtons.js
|
|
// 事件列表模式切换按钮组
|
|
|
|
import React from 'react';
|
|
import { Button, ButtonGroup } from '@chakra-ui/react';
|
|
|
|
/**
|
|
* 事件列表模式切换按钮组
|
|
* @param {string} mode - 当前模式 'vertical' | 'four-row'
|
|
* @param {Function} onModeChange - 模式切换回调
|
|
*/
|
|
const ModeToggleButtons = React.memo(({ mode, onModeChange }) => {
|
|
return (
|
|
<ButtonGroup size="sm" isAttached>
|
|
<Button
|
|
onClick={() => onModeChange('vertical')}
|
|
colorScheme="blue"
|
|
variant={mode === 'vertical' ? 'solid' : 'outline'}
|
|
>
|
|
纵向
|
|
</Button>
|
|
<Button
|
|
onClick={() => onModeChange('four-row')}
|
|
colorScheme="blue"
|
|
variant={mode === 'four-row' ? 'solid' : 'outline'}
|
|
>
|
|
平铺
|
|
</Button>
|
|
</ButtonGroup>
|
|
);
|
|
});
|
|
|
|
export default ModeToggleButtons;
|