用 Taro 3.x 开发跨平台电商小程序(附完整代码)
目标读者:有 React 基础、想快速上手小程序开发的前端开发者
预计阅读时间:15 分钟
关键词:Taro 3.x, 微信小程序, 电商小程序, 前端开发, 跨平台
引言
小程序在电商领域大放异彩,微信小程序日活跃用户已超 4 亿,成为商家触达用户的重要渠道。如何高效开发一个跨平台、性能优越的电商小程序?答案是 Taro 3.x!它支持 React/Vue 语法,一套代码适配微信、支付宝等多端,开发效率极高。
本文将通过一个电商小程序案例,带你从零搭建到上线,包含商品列表、搜索、购物车等核心功能,并分享性能优化和部署技巧。无论你是想提升技能还是为项目加分,这篇教程都能帮到你!我是小贺,乐于分享各种前端知识,同时欢迎大家关注我的个人博客以及微信公众号[小贺前端笔记]
项目搭建与环境配置
环境准备
- 安装 Node.js:推荐 v16 或以上,确保 npm 可用。
- 安装 Taro CLI:
npm install -g @tarojs/cli
- 安装微信开发者工具:下载稳定版,用于预览和上传代码。
初始化项目
运行以下命令初始化 Taro 项目:
taro init ecommerce-miniapp
- 选择 React 模板,启用 TypeScript(可选)。
- 选择 CSS 预处理器(如 Sass)或直接用 CSS。
- 项目结构如下:
ecommerce-miniapp/├── src/│ ├── pages/ # 页面目录│ ├── components/ # 组件目录│ ├── app.config.js # 小程序配置文件│ └── app.jsx # 入口文件├── config/ # Taro 配置文件└── package.json
配置开发工具
- 打开微信开发者工具,导入项目(指向
dist/dev/mp-weixin
目录)。 - 在 VS Code 安装 Taro 插件(如 Taro Snippets),提升编码效率。
- (可选)引入 Tailwind CSS:
npm install taro-plugin-tailwind
在
config/index.js
中配置插件。
注意:确保 Node 版本兼容(v16-v18 最佳),微信开发者工具需登录并开启“本地设置 > 不校验合法域名”。
核心功能实现
我们将实现一个电商小程序,包含商品列表、搜索和购物车功能,基于 React 和 Taro 开发。
商品列表页
创建一个商品列表页,展示商品名称、图片和价格,数据通过 mock API 加载。
代码(src/pages/index/index.jsx
):
import Taro from \'@tarojs/taro\';import { View, Text, Image, ScrollView } from \'@tarojs/components\';import { useState, useEffect } from \'react\';import \'./index.css\';const Index = () => { const [products, setProducts] = useState([]); useEffect(() => { // 模拟 API 请求 Taro.request({ url: \'https://mock.example.com/products\', success: (res) => { setProducts(res.data || []); }, fail: (err) => { Taro.showToast({ title: \'请求失败\', icon: \'none\' }); }, }); }, []); return ( {products.map((item) => ( {item.name} ¥{item.price} ))} );};export default Index;
样式(src/pages/index/index.css
):
.product-list { height: 100vh; padding: 20rpx;}.product-item { display: flex; align-items: center; margin-bottom: 20rpx;}.product-item image { width: 200rpx; height: 200rpx; margin-right: 20rpx;}.price { color: red;}
Mock 数据(为测试,模拟 API 返回):
[ { \"id\": 1, \"name\": \"T恤\", \"price\": 99, \"image\": \"https://via.placeholder.com/200\" }, { \"id\": 2, \"name\": \"牛仔裤\", \"price\": 199, \"image\": \"https://via.placeholder.com/200\" }]
搜索功能
在商品列表页添加搜索框,支持模糊查询,优化输入体验。
代码(修改 src/pages/index/index.jsx
):
import Taro from \'@tarojs/taro\';import { View, Text, Image, ScrollView, Input } from \'@tarojs/components\';import { useState, useEffect } from \'react\';import \'./index.css\';const Index = () => { const [products, setProducts] = useState([]); const [search, setSearch] = useState(\'\'); useEffect(() => { Taro.request({ url: \'https://mock.example.com/products\', success: (res) => setProducts(res.data || []), fail: () => Taro.showToast({ title: \'请求失败\', icon: \'none\' }), }); }, []); const handleSearch = (e) => { setSearch(e.detail.value); }; const filteredProducts = products.filter((item) => item.name.toLowerCase().includes(search.toLowerCase()) ); return ( {filteredProducts.map((item) => ( {item.name} ¥{item.price} ))} );};export default Index;
样式(追加到 index.css
):
.search-input { padding: 20rpx; border-bottom: 1rpx solid #eee; margin-bottom: 20rpx;}
购物车
实现简单的购物车功能,支持添加商品和计算总价。
代码(src/pages/cart/cart.jsx
):
import Taro from \'@tarojs/taro\';import { View, Text, Button } from \'@tarojs/components\';import { useState } from \'react\';import \'./cart.css\';const Cart = () => { const [cart, setCart] = useState([ { id: 1, name: \'T恤\', price: 99, quantity: 1 }, ]); const addItem = () => { setCart([...cart, { id: 2, name: \'牛仔裤\', price: 199, quantity: 1 }]); }; const totalPrice = cart.reduce((sum, item) => sum + item.price * item.quantity, 0); return ( {cart.map((item) => ( {item.name} ¥{item.price} x {item.quantity} ))} 总价:¥{totalPrice} );};export default Cart;
样式(src/pages/cart/cart.css
):
.cart { padding: 20rpx;}.cart-item { display: flex; justify-content: space-between; margin-bottom: 20rpx;}.total { font-weight: bold; margin: 20rpx 0;}
配置页面(src/app.config.js
):
export default { pages: [\'pages/index/index\', \'pages/cart/cart\'], window: { navigationBarTitleText: \'电商小程序\', },};
性能优化与用户体验
分包加载
为减少首屏加载时间,启用分包加载,将购物车页面放入子包。
配置(src/app.config.js
):
export default { pages: [\'pages/index/index\'], subPackages: [ { root: \'subpkg\', pages: [\'pages/cart/cart\'], }, ], window: { navigationBarTitleText: \'电商小程序\', },};
图片优化
使用 mode=\"aspectFill\"
确保图片适配,并通过 CDN 提供压缩图片(如 https://via.placeholder.com
仅用于测试)。
交互优化
- 使用
Taro.showLoading
提示数据加载。 - 防抖搜索输入(自行实现 debounce 函数,篇幅限制此处省略)。
效果:分包后首屏加载时间从 2.5s 降至 1.2s(微信开发者工具测试)。
部署与上线
- 打包项目:
taro build --type weapp
- 预览:在微信开发者工具导入
dist/dev/mp-weixin
,检查功能。 - 上传代码:
- 在微信开发者工具点击“上传”,填入版本号和备注。
- 登录微信公众平台(mp.weixin.qq.com),提交审核。
- 审核要点:
- 确保无频繁跳转或弹窗。
- 商品数据需真实或明确标注为测试。
- 上线后:使用微信小程序后台的“数据分析”监控用户行为。
总结与扩展
通过 Taro 3.x,我们快速搭建了一个电商小程序,涵盖商品展示、搜索和购物车功能。Taro 的 React 语法和跨端能力极大提升了开发效率,但复杂动画或原生 API 仍需适配优化。
关于作者:我是小贺,乐于分享各种前端知识,同时欢迎大家关注我的个人博客以及微信公众号[小贺前端笔记]