学习笔记 | 微信小程序项目day02

今日学习内容

  • 安装uni-ui跟@uni-helper/uni-ui-types
  • 配置pinia持久化
  • 请求工具类的拦截器
  • 请求工具类的请求函数

安装uni-ui跟@uni-helper/uni-ui-types

npm install -g cnpm --registry=https://registry.npmmirror.com
npm set registry https://registry.npmmirror.com
npm i -g pnpm
npm i @dcloudio/uni-ui//配置ts类型
pnpm i -D @uni-helper/uni-ui-types

配置uni-ui自动导入

设置pinia持久化

1、新建stores/index.ts

import { createPinia } from 'pinia'
import persist from 'pinia-plugin-persistedstate'// 创建 pinia 实例
const pinia = createPinia()
// 使用持久化存储插件
pinia.use(persist)// 默认导出,给 main.ts 使用
export default pinia// 模块统一导出
export * from './modules/member'

2、在新建store的时候加上持久化的配置

import { defineStore } from 'pinia'
import { ref } from 'vue'// 定义 Store
export const useMemberStore = defineStore('member',() => {// 会员信息const profile = ref<any>()// 保存会员信息,登录时使用const setProfile = (val: any) => {profile.value = val}// 清理会员信息,退出时使用const clearProfile = () => {profile.value = undefined}// 记得 returnreturn {profile,setProfile,clearProfile,}},// TODO: 持久化{//网页端的写法// persist: true,persist: {storage: {getItem(key) {return uni.getStorageSync(key)},setItem(key, value) {uni.setStorageSync(key, value)},},},},
)

请求工具类的拦截器

配置拦截器并添加

import { useMemberStore } from "@/stores"//api请求地址
const apiUrl = 'https://pcapi-xiaotuxian-front-devtest.itheima.net'//初始化拦截器配置
const httpInterceptor = {//拦截前触发invoke(options: UniApp.RequestOptions) {//如果不是http请求开头的则需要拼接apiUrlif (!options.url.startsWith('http')) {options.url = apiUrl + options.url}//配置请求超时时间options.timeout = 10 * 1000//添加请求头options.header = {...options.header,'source-client': 'miniapp'}//添加tokenconst memberStore = useMemberStore()const token = memberStore.profile?.tokenif (token) {options.header.Authorization = token}}
}//添加拦截器  request uploadFile   httpInterceptor是配置
uni.addInterceptor('request', httpInterceptor)
uni.addInterceptor('uploadFile', httpInterceptor)

使用

<script setup lang="ts">
import { useMemberStore } from '@/stores'
import '@/utils/http'const memberStore = useMemberStore()const getData = () => {uni.request({method: 'GET',url: '/category/top',header: {},})
}</script><template><view class="my"><view>会员信息:{{ memberStore.profile }}</view><button @tap="memberStore.setProfile({nickname: '黑马先锋',token: '123'})" size="mini" plain type="primary">保存用户信息</button><button @tap="memberStore.clearProfile()" size="mini" plain type="warn">清理用户信息</button><button @tap="getData()" size="mini" plain type="warn">发起请求</button></view>
</template><style lang="scss">
//
</style>

请求工具类的请求函数

import { useMemberStore } from '@/stores'//api请求地址
const apiUrl = 'https://pcapi-xiaotuxian-front-devtest.itheima.net'//初始化拦截器配置
const httpInterceptor = {//拦截前触发invoke(options: UniApp.RequestOptions) {//如果不是http请求开头的则需要拼接apiUrlif (!options.url.startsWith('http')) {options.url = apiUrl + options.url}//配置请求超时时间options.timeout = 10 * 1000//添加请求头options.header = {...options.header,'source-client': 'miniapp',}//添加tokenconst memberStore = useMemberStore()const token = memberStore.profile?.tokenif (token) {options.header.Authorization = token}},
}//添加拦截器  request uploadFile   httpInterceptor是配置
uni.addInterceptor('request', httpInterceptor)
uni.addInterceptor('uploadFile', httpInterceptor)//配置请求函数//step.1 先定义出与后端约定返回的数据格式
interface Data<T> {code: stringmsg: stringresult: T
}//step.2 定义出http 使用泛型
export const http = <T>(options: UniApp.RequestOptions) => {//返回Promisereturn new Promise<Data<T>>((resolve, reject) => {uni.request({...options,//step.3 响应成功success(res) {//如果状态码是2xx || 3xx 才会进入resolveif (res.statusCode >= 200 && res.statusCode < 300) {resolve(res.data as Data<T>)} else if (res.statusCode === 401) {//清理用户信息并跳转到登录页const memberStore = useMemberStore()memberStore.clearProfile()//跳转登录页uni.navigateTo({ url: '/pages/login/login' })reject(res)} else {//其他错误,进行提示uni.showToast({title: (res.data as Data<T>).msg || '请求错误',icon: 'none',mask: true})reject(res)}},//step.4 响应失败fail(err) {reject(err)uni.showToast({icon: 'none',title: '网络错误,换个网络试试'})}})})
}

测试请求路径不存在

<script setup lang="ts">
import { useMemberStore } from '@/stores'
import { http } from '@/utils/http'const memberStore = useMemberStore()const getData = async () => {const res = await http<string[]>({method: 'GET',url: '/category/top123',header: {},})console.log(res)
}
</script><template><view class="my"><view>会员信息:{{ memberStore.profile }}</view><button @tap="memberStore.setProfile({nickname: '黑马先锋',token: '123',})" size="mini" plain type="primary">保存用户信息</button><button @tap="memberStore.clearProfile()" size="mini" plain type="warn">清理用户信息</button><button @tap="getData()" size="mini" plain type="warn">发起请求</button></view>
</template><style lang="scss">
//
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/751895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PC电脑如何使用HDMI连接小米电视当显示屏

使用HDMI连接好当时和电脑&#xff0c;HDMI2.0会更清晰&#xff1b;小米电视会自动弹窗提示你有HDMI 接口连接&#xff0c;或者你进入信号源进行选择即可&#xff1b;需要平时我们电脑的显示器正常连接&#xff0c;然后按 win p &#xff0c;选择 扩展 屏幕&#xff1b; 进入设…

如何通过蓝牙获取手机时间同步时钟RTC万年历走ble或者edr经典蓝牙

一、功能简介 KT6368A支持连接手机获取手机的时间信息&#xff0c;可以同步时钟 无需安装任何app&#xff0c;直接使用系统蓝牙即可实现 走的就是edr的经典蓝牙 同时它不影响音频蓝牙&#xff0c;还能保持低功耗的运行 实现的方式就是手机连接好蓝牙芯片KT6368A&#xff0…

R语言聚类分析-K均值聚类与系统聚类法

一、数据集为firm.csv&#xff0c;给出了22家美国公用事业公司的相关数据集&#xff0c;各数据集变量的名称和含义如下&#xff1a;X1为固定费用周转比&#xff08;收入/债务&#xff09;&#xff0c;X2为资本回报率&#xff0c;X3为每千瓦容量成本&#xff0c;X4为年载荷因子&…

Etcd 介绍与使用(入门篇)

etcd 介绍 etcd 简介 etc &#xff08;基于 Go 语言实现&#xff09;在 Linux 系统中是配置文件目录名&#xff1b;etcd 就是配置服务&#xff1b; etcd 诞生于 CoreOS 公司&#xff0c;最初用于解决集群管理系统中 os 升级时的分布式并发控制、配置文件的存储与分发等问题。基…

使用 GitHub Actions 通过 CI/CD 简化 Flutter 应用程序开发

在快节奏的移动应用程序开发世界中&#xff0c;速度、可靠性和效率是决定项目成功或失败的关键因素。持续集成和持续部署 (CI/CD) 实践已成为确保满足这些方面的强大工具。当与流行的跨平台框架 Flutter 和 GitHub Actions 的自动化功能相结合时&#xff0c;开发人员可以创建无…

MySQL_数据库图形化界面软件_00000_00001

目录 NavicatSQLyogDBeaverMySQL Workbench可能出现的问题 Navicat 官网地址&#xff1a; 英文&#xff1a;https://www.navicat.com 中文&#xff1a;https://www.navicat.com.cn SQLyog 官网地址&#xff1a; 英文&#xff1a;https://webyog.com DBeaver 官网地址&…

RabbitMQ——死信队列和延迟队列

文章目录 RabbitMQ——死信队列和延迟队列1、死信队列2、基于插件的延迟队列2.1、安装延迟队列插件2.2、代码实例 RabbitMQ——死信队列和延迟队列 1、死信队列 死信队列&#xff08;Dead Letter Queue&#xff0c;DLQ&#xff09;是 RabbitMQ 中的一种重要特性&#xff0c;用…

【HTML】HTML表单8.2(表单标签2)

目录 接上期&#xff0c;大致实现效果 文章简要 注释&#xff1a;这一次介绍的很多效果需要后期与服务器配合&#xff0c;但我们这里先只介绍效果 ①提交按钮 ②获取验证码 ③上传文件 ④还原所有表单内容 ⑤下拉表单 ⑥文字域 接上期&#xff0c;大致实现效果 文章简要 注…

matlab中Signal Editor定义梯形信号输出矩形信号

matlab中Signal Editor定义梯形信号输出矩形信号&#xff0c;可以通过如下勾选差值数据实现梯形信号输出。

GPT-1, GPT-2, GPT-3, InstructGPT / ChatGPT and GPT-4 总结

1. GPT-1 What the problem GPT-1 solve? 在 GPT-1 之前&#xff0c;NLP 通常是一种监督模型。 对于每个任务&#xff0c;都有一些标记数据&#xff0c;然后根据这些标记数据开发监督模型。 这种方法存在几个问题&#xff1a;首先&#xff0c;需要标记数据。 但 NLP 不像 CV&…

云原生部署手册02:将本地应用部署至k8s集群

&#xff08;一&#xff09;部署集群镜像仓库 1. 集群配置 首先看一下集群配置&#xff1a; (base) ➜ ~ multipass ls Name State IPv4 Image master Running 192.168.64.5 Ubuntu 22.04 LTS1…

一. 并行处理与GPU体系架构-GPU并行处理

目录 前言0. 简述1. 这个小节会涉及到的关键字2. CPU与GPU在并行处理的优化方向3. Summary总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习下课程第一章——并行处理与GPU体…

Google云计算原理与应用(三)

目录 五、分布式存储系统Megastore&#xff08;一&#xff09;设计目标及方案选择&#xff08;二&#xff09;Megastore数据模型&#xff08;三&#xff09;Megastore中的事务及并发控制&#xff08;四&#xff09;Megastore基本架构&#xff08;五&#xff09;核心技术——复制…

pom.xml中的配置无法被yaml读取

问题描述 项目中指定了多个profiles, 但是application.yaml读取报错&#xff0c;报错信息如下 Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts 12:41:52.325 [mai…

使用 pnpm 搭建 monorepo 项目

引言 在我之前的开发经历中&#xff0c;并没有实际使用过 Monorepo 管理项目&#xff0c;尽管之前对此有所了解&#xff0c;但并未深入探究。然而&#xff0c;如今许多开源项目都采纳了 Monorepo 方式&#xff0c;对于不熟悉它的开发者来说&#xff0c;阅读和理解这些项目的源…

【HarmonyOS】ArkUI - 向左/向右滑动删除

核心知识点&#xff1a;List容器 -> ListItem -> swipeAction 先看效果图&#xff1a; 代码实现&#xff1a; // 任务类 class Task {static id: number 1// 任务名称name: string 任务${Task.id}// 任务状态finished: boolean false }// 统一的卡片样式 Styles func…

C语言快速入门之内存函数的使用和模拟实现

1.memcpy 它可以理解为memory copy的组合&#xff0c;memory有记忆的意思&#xff0c;这里指的是内存&#xff0c;copy是拷贝&#xff0c;这个函数是针对内存块进行拷贝的 函数原型 void* memcpy(void* destination,const void* source, size_t num); 从source位置开始&am…

ChatGPT国内镜像站大全

#今天在知乎看到一个问题&#xff1a;“平民不参与内测的话没有账号还有机会使用ChatGPT吗&#xff1f;” 从去年GPT大火到现在&#xff0c;关于GPT的消息铺天盖地&#xff0c;真要有心想要去用&#xff0c;途径很多&#xff0c;别的不说&#xff0c;国内GPT的镜像站到处都是&…

基于sortablejs实现拖拽element-ui el-table表格行进行排序

可以用原生的dragstart、drag、dragend、dragover、drop、dragleave实现这个效果&#xff0c;但是有现成的轮子就不要重复造了&#xff0c;看效果&#xff1a; <template><el-table :class"$options.name" :data"tableData" ref"table"…

Docker进阶教程 - 1 Dockerfile

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 1 Dockerfile Dockerfile 是做什么的&#xff1f; 我们前面说到&#xff0c;制作镜像的方法主要有两种方式&#xff1a; 使用 docker commit 命令&#xff1b;使用 Dockerfile 文件。 但是…