问题描述

1. 图片闪烁问题

在 React 应用开发中,当我们将 img 标签封装到组件中并在页面间切换时,经常会遇到图片闪烁的问题。这种闪烁现象严重影响了用户体验,使界面切换显得不够流畅。

2. 复杂状态管理问题

在处理复杂状态时,特别是涉及以下场景:

  • 表单创建后的页面刷新
  • 全局状态的调整
  • 组件间数据共享

虽然使用常规的 React hooks 可以处理这些情况,但当业务逻辑变得复杂时,会导致频繁的 setState 调用。虽然可以通过自定义 hook 来优化代码结构,但仍然存在一些挑战。

例如,在一个电商应用中:

  • 侧边栏需要显示商品总量
  • 主页面展示商品列表
  • 两个独立组件都需要调用相同的商品列表接口

这种情况下常见的解决方案是重复调用接口,虽然实现简单,但会造成不必要的性能开销。之前我主要通过 MobX 这类状态管理工具来减少重复请求。

解决方案

1. 图片加载优化

为了解决图片闪烁问题,采用了以下方案:

  • 使用 CSS background-image 替代 img 标签
  • 利用浏览器对背景图片的预加载和缓存机制
  • 尽管尝试过 img 标签的 lazy loading,但效果不如背景图片方案

2. 样式管理优化

引入 Tailwind CSS 来优化样式管理:

  • 利用 AI 工具辅助编写 Tailwind 类名
  • 享受 Tailwind 带来的样式统一性
  • 利用 Tailwind 的性能优化特性

3. 数据状态管理

引入 TansStack Query 作为数据获取和缓存解决方案:

  • 简化服务端状态管理
  • 优化数据请求策略
  • 提供开箱即用的缓存机制
  • 降低重复请求的概率