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 目录进行预览或发包