S12-07 小程序-Taro-项目:mr-mp-taro-juanpi
[TOC]

接口文档
警告
由于juanpi.com网站已经倒闭,因此接口中的图片已经不再显示
首页
首页Banner
请求方法 : GET
接口地址 : /homeinfo
调用例子 : baseURL + /homeinfo
接口返回的数据格式:
{
"code": 200,
"data": {
"xxx": "xxx"
}
}
受欢迎度和推荐
请求方法 : GET
接口地址 : /recommend
调用例子 : baseURL + /recommend
{
"code": 200,
"data": {
"xxx": "xxx"
}
}
商品列表
请求方法 : POST
接口地址 : baseURL + /goods
可选参数(json格式) :
{
"page": 1, # 默认为1,即第一页
"type": 0 # 支持 0 和 1。 其中 0 代表是精选专场, 1 代表是精选单品
}调用例子 : baseURL + /goods
接口返回的数据格式:
{
"code": 200,
"data": {
"xxx": "xxx"
}
}我的
我的页面列表
请求方法 : GET
接口地址 : /profile
必选参数 : 无
调用例子 : baseURL + /profile
接口返回的数据格式:
{
"code": 200,
"data": {
"xxx": "xxx"
}
}环境搭建
技术栈
- react18
- RTK
- taro
项目初始化
taro init mr-mp-taro-juanpi
处理报错
错误: $RefreshReg$ is not defined

解决: 这是由于React 在 H5 Dev 编译模式时默认开启了 fast refresh 功能。可以通过关闭热更新解决该问题:
1、在config/index.js中,设置h5的hot为false
const config = {
// ...
h5: {
devServer: {
hot: false, // 关闭热更新
},
},
}2、在babel.config.js中,设置hot为false
module.exports = {
presets: [
[
'taro',
{
framework: 'react',
hot: false, // 禁用fast refresh
},
],
],
}错误: 不支持commonjs

解决: 这是因为eslint的格式化检查问题,实际是需要支持commonjs的。可以关闭该检查

错误: 缺少全局变量的定义

解决: 在eslint中定义该全局变量

错误: eslint引号规则强制在 JSX 属性中使用一致的单引号或双引号

解决: 关闭该规则

功能: 添加别名@

功能: 启用webpack缓存

功能: 启用局部css样式,和图片转base64限制


依赖包
- @reduxjs/toolkit
- react-redux
- classnames
- proptypes
页面模板
页面使用函数式组件 + hooks编写

样式
样式使用局部样式:文件格式:index.modules.scss
使用样式

定义样式

导航栏


注意: 该配置在h5中不会生效,只在小程序中生效
tabBar
1、创建页面
taro create --name category
taro create --name cart
taro create --name profile
taro create --name detail2、配置tabbar

3、配置pages


首页
组件:HomeSearch

页面布局
1、使用组件

2、页面布局

3、样式

组件:HomeBanner

接口
请求方法 : GET
接口地址 : /homeinfo
调用例子 : baseURL + /homeinfo
接口返回的数据格式:
{
"code": 200,
"data": {
"xxx": "xxx"
}
}
请求数据
1、service

2、store/index.js

3、store/modules/home.js

4、app.js

5、组件

页面布局
1、获取store数据

2、使用组价

3、页面布局

组件:HomePopular

接口
请求方法 : GET
接口地址 : /recommend
调用例子 : baseURL + /recommend
{
"code": 200,
"data": {
"xxx": "xxx"
}
}
请求数据
1、service

2、store


3、组件

页面布局
1、使用组件

2、页面布局

3、样式

组件:HomeRecommend

接口
请求方法 : GET
接口地址 : /recommend
调用例子 : baseURL + /recommend
{
"code": 200,
"data": {
"xxx": "xxx"
}
}
请求数据
见:组件:HomePopular
页面布局
1、使用组件

2、页面布局

3、样式

商品列表
全局组件:TabControl

页面布局
1、使用组件

2、页面布局

3、样式

接口
请求方法 : POST
接口地址 : baseURL + /goods
可选参数(json格式) :
{
"page": 1, # 默认为1,即第一页
"type": 0 # 支持 0 和 1。 其中 0 代表是精选专场, 1 代表是精选单品
}调用例子 : baseURL + /goods
接口返回的数据格式:
{
"code": 200,
"data": {
"xxx": "xxx"
}
}请求数据
1、service

2、store




3、组件:触发action
注意: 异步action只能接收一个参数

4、组件:获取数据

全局组件:GridView

页面布局
1、使用组件

2、页面布局

3、样式

全局组件:GridViewItem
页面布局
1、使用组件

2、页面布局

3、样式

功能
商品列表切换
1、在homeStore中定义当前tab名currentTabName

2、在home页获取currentTabName

3、在使用GridView组件时通过currentTabName动态获取goods数据

4、点击tabControl,修改homeStore中的currentTabName




上拉加载
1、在useReachBottom()生命周期中监听页面滚动到底部,并发送请求

详情页
Detail
页面跳转
1、点击grid-view-item组件,向外发射onItemClick事件


2、在外部组件中监听onItemClick事件

3、在detail页面接收参数,并展示

打包部署
打包配置
可以在dist目录下创建一个与编译的目标平台名同名的目录,并将结果放在这个目录下。
例如:编译到微信小程序,最终结果是在 dist/weapp 目录下; H5打包结果放在 dist/h5目录下
好处是,各个平台使用独立的目录互不影响,从而达到多端同步调试的目的, 在config/index.js配置如下:
1、在config/index.js文件中配置如下:

2、针对微信小程序的特殊配置

H5
打包:
npm run build:h5微信小程序
1、在project.config.json中配置小程序

2、打包
npm run build:weapp3、微信开发者工具打开 weapp 目录进行预览或发包