赵忠林 501e79eed7 fix(index): 修复首页轮播图显示与高度自适应问题
- 解决首页轮播图仅显示第一张图片的问题,支持广告位多图展开显示
- 通过 flatMap 展开广告位所有图片为独立轮播项,兼容单图老数据
- 轮播图点击跳转逻辑按广告位路径保持不变
- 获取轮播容器实际宽度,计算轮播高度自适应,替代固定 160px 高度
- 根据后台广告位宽高比计算轮播图展示高度,无效数据时回退到默认高度
- 轮播容器新增类名便于 DOM 选择和尺寸测量
- 轮播图及占位区高度均采用动态计算结果,适配不同设备屏幕宽度
2026-07-15 22:30:02 +08:00

Paopao Taro - 项目框架

基于 Taro 4.0.8 + React 18.3.1 + TypeScript 5.7.2 的跨端开发框架

📦 技术栈

核心框架

  • Taro: 4.0.8 - 跨端开发框架
  • React: 18.3.1 - UI 框架
  • TypeScript: 5.7.2 - 类型系统

UI 组件库

  • NutUI React Taro: 2.7.4 - 京东风格的 Taro React 组件库
  • NutUI Icons: ^1.0.0 - 图标库

样式方案

  • Sass: ^1.81.0 - CSS 预处理器
  • TailwindCSS: 3.4.17 - 原子化 CSS 框架

状态管理

  • React Hooks - 内置 Hooks
  • Context API - 跨组件状态共享

工具库

  • Day.js: ^1.11.13 - 日期处理
  • Crypto-js: ^4.2.0 - 加密解密
  • React Router DOM: ^6.28.0 - 路由管理

🚀 快速开始

安装依赖

# 使用 npm
npm install

# 使用 yarn
yarn install

# 使用 pnpm
pnpm install

开发模式

# 微信小程序
npm run dev:weapp

# H5
npm run dev:h5

# 支付宝小程序
npm run dev:alipay

# 百度小程序
npm run dev:swan

# 字节跳动小程序
npm run dev:tt

# QQ 小程序
npm run dev:qq

生产构建

# 微信小程序
npm run build:weapp

# H5
npm run build:h5

# 其他平台类似
npm run build:[platform]

📁 项目结构

shop-taro/
├── config/                   # Taro 配置文件
│   ├── index.ts            # 主配置
│   ├── dev.ts              # 开发配置
│   └── prod.ts             # 生产配置
├── src/                     # 源代码
│   ├── app.config.ts       # 应用配置页面路由、tabBar等
│   ├── app.tsx             # 应用入口
│   ├── app.scss            # 全局样式
│   ├── pages/              # 页面目录
│   │   ├── index/         # 首页
│   │   │   ├── index.tsx
│   │   │   ├── index.scss
│   │   │   └── index.config.ts
│   │   └── home/          # 个人中心页
│   │       ├── home.tsx
│   │       ├── home.scss
│   │       └── home.config.ts
│   ├── components/         # 自定义组件
│   ├── contexts/           # Context API
│   │   └── AppContext.tsx  # 应用上下文
│   ├── hooks/              # 自定义 Hooks
│   │   └── useAppContext.ts
│   ├── utils/              # 工具函数
│   │   └── index.ts       # 常用工具(日期、加密、防抖节流等)
│   ├── types/              # TypeScript 类型定义
│   │   └── global.d.ts    # 全局类型声明
│   ├── styles/             # 样式文件
│   └── assets/             # 静态资源
│       └── tabbar/         # tabBar 图标
├── package.json            # 项目依赖
├── tsconfig.json           # TypeScript 配置
├── tailwind.config.js      # TailwindCSS 配置
├── postcss.config.js       # PostCSS 配置
├── project.config.json     # 小程序项目配置
└── README.md              # 项目说明

特性

1. 主题切换

  • 支持浅色/深色模式切换
  • 使用 Context API 管理主题状态
  • 暗黑模式适配

2. NutUI 组件库

  • 已集成 @nutui/nutui-react-taro@2.7.4
  • 支持按需引入
  • 中文国际化配置

3. TailwindCSS 集成

  • 支持原子化 CSS 编写
  • 暗黑模式支持dark mode
  • 自定义主题色配置

4. 工具函数封装

  • 日期处理: 基于 Day.js 的格式化
  • 加密解密: MD5、AES 加密
  • 性能优化: 防抖、节流函数
  • 数据操作: 深拷贝等工具

5. TypeScript 支持

  • 完整的类型定义
  • 路径别名配置 @/*
  • 严格模式开启

🎨 代码示例

使用 NutUI 组件

import { Button, Cell, CellGroup } from '@nutui/nutui-react-taro'

export default function MyPage() {
  return (
    <CellGroup>
      <Cell title="标题" description="描述" />
      <Button type="primary" block>
        提交
      </Button>
    </CellGroup>
  )
}

使用 TailwindCSS

<View className="p-4 bg-white dark:bg-gray-800">
  <Text className="text-lg font-bold text-gray-800 dark:text-white">
    暗黑模式适配文本
  </Text>
</View>

使用 Context 管理状态

import { useAppContext } from '@/hooks/useAppContext'

export default function MyPage() {
  const { theme, toggleTheme } = useAppContext()
  
  return (
    <Button onClick={toggleTheme}>
      当前主题: {theme}
    </Button>
  )
}

使用工具函数

import { formatDate, md5, debounce } from '@/utils'

// 日期格式化
const dateStr = formatDate(new Date())

// MD5 加密
const encrypted = md5('hello world')

// 防抖
const handleSearch = debounce((keyword) => {
  console.log(keyword)
}, 500)

📝 开发规范

文件命名

  • 页面目录: kebab-case (如 user-profile/)
  • 组件文件: PascalCase (如 UserProfile.tsx)
  • 工具文件: camelCase (如 formatDate.ts)

代码风格

  • 使用 ESLint + @typescript-eslint 进行代码检查
  • 使用 2 空格缩进
  • 分号结尾
  • 单引号优先

提交规范

feat: 新功能
fix: 修复 bug
docs: 文档更新
style: 代码格式调整
refactor: 重构
test: 测试相关
chore: 构建/工具配置

🔧 常见问题

1. TailwindCSS 样式不生效?

检查 postcss.config.js 配置,确保已安装 postcss-nested

2. NutUI 组件样式丢失?

确保在 app.scss 中引入了 NutUI 样式:

@import '@nutui/nutui-react-taro/dist/styles/vitamin.css';

3. TypeScript 路径别名报错?

检查 tsconfig.jsonpaths 配置,并确保 IDE 正确识别。

📚 相关文档

📄 License

MIT


构建时间: 2026-05-10
作者: Senior Developer

Description
鑫龙家电
Readme 4.6 MiB
2026-07-14 21:16:32 +08:00
Languages
TypeScript 97.7%
SCSS 1.8%
HTML 0.4%