react-taro小程序fetch网络请求封装

本文介绍了如何使用Taro.js封装网络请求函数,注重处理登录状态和错误反馈,确保了在不同场景下的请求体验。通过getStorage和fetch函数,实现了自动登录和统一错误提示。


import Taro from '@tarojs/taro'
const CODE_SUCCESS = 200
const CODE_FORBIDDEN = 403
const BASE_URL = '请求域名'
const ERROR_MSG_MAP = {
	[CODE_FORBIDDEN]: '未登录',
	default: '请求异常'
}
let loadingCount = 0

function showLoading() {
	if (loadingCount === 0) {
		Taro.showLoading({
			title: "加载中",
			mask: true,
		})
	}
	loadingCount++
}

function hideLoading() {

	if (loadingCount <= 0) {
		return;
	}

	loadingCount--;

	if (loadingCount === 0) {
		Taro.hideLoading();
	}
}

function getStorage(key) {
	return Taro.getStorage({
			key
		})
		.then((res) => res.data)
		.catch(() => '')
}
async function fetch(options) {
	const {
		url,
		method = "GET",
		showToast = false,
		autoLogin = false,
		leaveMeAlone = false,
		data
	} = options;
	let token = "";
	try {
		const result = await getStorage('X-Auth-Token');

		token = result || "";

	} catch (error) {
		console.log(error);

	}
	let header = {

	};
	if (token !== "") {
		header['X-Auth-Token'] 
Taro 框架中开发微信小程序时,实现生命周期自动埋点的最佳方法是通过封装全局的生命周期处理逻辑,统一捕获页面和组件的生命周期事件,从而自动上报埋点数据。以下是一个可行的实现方案: ### 1. 利用入口文件 `app.js` 统一处理全局生命周期 Taro 的入口文件 `app.js` 可以作为全局生命周期监听的入口点。通过重写入口文件的生命周期方法,可以在页面加载、显示、隐藏等事件中统一插入埋点逻辑。 ```javascript import React from 'react' import { AppContainer } from '@tarojs/rn-temp' class App extends React.Component { componentDidMount() { // 全局初始化埋点SDK initTrackingSDK() } componentDidShow() { // 上报应用显示事件 trackEvent('app_show') } componentDidHide() { // 上报应用隐藏事件 trackEvent('app_hide') } render() { return <AppContainer>{this.props.children}</AppContainer> } } export default App ``` 上述代码中,`initTrackingSDK` 可以是初始化埋点 SDK 的函数,而 `trackEvent` 是封装好的埋点上报函数。 ### 2. 使用高阶组件(HOC)封装页面生命周期埋点 对于页面级别的生命周期,如 `onLoad`、`onReady`、`onUnload` 等,可以使用高阶组件来统一处理。 ```javascript function withTracking(WrappedComponent) { return class extends React.Component { componentWillMount() { // 页面加载时埋点 trackEvent('page_load', { page: WrappedComponent.displayName || 'UnknownPage' }) } componentDidMount() { // 页面准备完成时埋点 trackEvent('page_ready', { page: WrappedComponent.displayName || 'UnknownPage' }) } componentWillUnmount() { // 页面卸载时埋点 trackEvent('page_unload', { page: WrappedComponent.displayName || 'UnknownPage' }) } render() { return <WrappedComponent {...this.props} /> } } } ``` 在页面组件中使用: ```javascript class IndexPage extends React.Component { render() { return <View>Hello World</View> } } export default withTracking(IndexPage) ``` ### 3. 利用微信小程序原生生命周期事件 Taro 支持微信小程序特有的生命周期事件,如 `onPullDownRefresh`、`onReachBottom` 等,可以在页面中直接监听并上报埋点。 ```javascript class IndexPage extends React.Component { onPullDownRefresh() { trackEvent('pull_down_refresh') } onReachBottom() { trackEvent('reach_bottom') } render() { return <View>Hello World</View> } } ``` ### 4. 自动上报错误和页面不存在事件 在入口文件中可以通过重写 `componentDidCatchError` 和 `componentDidNotFound` 来自动捕获错误和页面缺失事件。 ```javascript componentDidCatchError(err) { trackError(err) } componentDidNotFound() { trackEvent('page_not_found') } ``` ### 5. 埋点函数封装建议 建议将埋点函数进行封装,支持参数化和节流控制,避免重复请求或性能问题。 ```javascript const trackEvent = (event, params = {}) => { const payload = { event, timestamp: Date.now(), ...params } // 发送埋点请求 sendBeacon('/tracking', payload) } const sendBeacon = (url, data) => { if (navigator.sendBeacon) { const body = JSON.stringify(data) navigator.sendBeacon(url, body) } else { // 回退到 fetch 或其他方式 fetch(url, { method: 'POST', body, keepalive: true }) } } ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nexus科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值