登录
- 使用Taro.login()获取code
- 将code传给后端获取token/open_id
- 获取useInfo授权(可选)
const res = await Taro.login();
await getToken(res.code); // 后端接口
微信支付
- 先调用后端支付接口,应当返回如下参数
- 将后端返回的参数,传入
Taro.requestOrderPayment
interface Option {
/** 时间戳,从 1970 年 1 月 1 日 00:00:00 至今的秒数,即当前的时间 */
timeStamp: string
/** 随机字符串,长度为32个字符以下 */
nonceStr: string
/** 统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=*** */
package: string
/** 订单信息,仅在需要校验的场景下需要传递,具体见[接口说明](https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/order/requestOrderPayment) */
orderInfo?
/** 外部 APP 用户 ID */
extUserUin?: string
/** 签名算法 */
signType?: keyof SignType
/** 签名,具体签名方案参见 [小程序支付接口文档](https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=3) */
paySign: string
}
const res = await pay();// 后端接口
Taro.requestOrderPayment({
...res,
success: (res1) => {
// do something
console.log(res1, "requestOrderPayment success");
},
fail: (err) => {
toast("去借钱 " + total);
console.log(err, "requestOrderPayment err");
},
});
分享小程序
- 在全局配置app.config.ts中添加
enableShareAppMessage: true - 在app.tsx/page.tsx中添加
Taro.showShareMenu - 在可分享的页面中添加
Taro.useShareAppMessage钩子
// app.config.ts
export default defineAppConfig({
enableShareAppMessage: true,
enableShareTimeline: true,
})
// app.tsx
Taro.showShareMenu({
showShareItems: ["wechatFriends", "wechatMoment"],
});
// home/index.tsx或者其他页面me/index.tsx
Taro.useShareAppMessage((res)=>{
return {
title: "邀您一起KO一杯~今日一切都OK!",
imageUrl: icons.icon_share, // 自定义封面
path: `/pages/home/index?token=${getLoad("token")}`, // 自定义path,可以在router.params里获取参数
};
})
触发Tabbar和 back,不刷新page
- 针对Tabbar,可以使用
Taro.useTabItemTap(callback) - back问题,可以使用
Taro.useDidShow(callback),Tabbar切换也会触发
// page.tsx
Taro.useTabItemTap({
// some init function
})
Taro.useDidShow({
// some init function
})
弹窗问题
在小程序中首栈页面的弹窗中,点返回按钮会退出小程序。 可使用Taro自带的PageContainer组件
import { PageContainer } from "@tarojs/components";
<PageContainer
show={showRegionPop}
onClickOverlay={() => setShowRegionPop(false)}
round
className="backdrop"
>
{* some components *}
</PageContainer>
路由栈限制问题
官方说明,页面栈不可超过10个,每次使用navigateTo都会增加一个。
大于10个需要手动清空Taro.reLauch
- 封装自定义跳转、back函数
- 使用
getCurrentPages().map(v => v.route)获取当前页面栈数量 - 当大于10,使用
reLauch清空,并额外存储这10个记录 - 这样返回就会有问题,检测当前页面是否为页面栈第0项,是则
reLauch到该路由,并移除一个存储中的页面
export const navTo = (url: string) => {
const routers = getCurrentPages().map((v) => v.route);
if (routers.length >= 10) {
setLoad("routers", routers); // 存storage
Taro.reLaunch({ url });
return;
}
Taro.navigateTo({ url });
};
export const navBack = () => {
const routers = getCurrentPages().map((v) => v.route);
const saveRouters = getLoad("routers");
if (routers.length === 1) {
if (saveRouters.length === 1) {
Taro.navigateBack();
return;
}
Taro.reLaunch({ url: saveRouters.at(-1) });
saveRouters.pop();
setLoad("routers", saveRouters);
return;
}
Taro.navigateBack();
};
留言
该文章持续记录中.... 有任何没写清楚的,请联系v+ laoyin666it