【uniapp】小程序开发:2 安装uni-ui组件库、使用pinia状态管理、自定义http请求

这篇具有很好参考价值的文章主要介绍了【uniapp】小程序开发:2 安装uni-ui组件库、使用pinia状态管理、自定义http请求。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、安装uni-ui组件库

1、安装

pnpm i -D sass
pnpm i @dcloudio/uni-ui

2、配置组件自动导入
使用 npm 安装好 uni-ui 之后,需要配置 easycom 规则,让 npm 安装的组件支持 easycom

打开项目根目录下的 pages.json 并添加 easycom 节点:

// pages.json
{
	"easycom": {
		"autoscan": true,
		"custom": {
			// uni-ui 规则如下配置
			"^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue"
		}
	},
	
	// 其他内容
	pages:[
		// ...
	]
}

3、安装插件,实现uni-ui组件的类型提示

pnpm i -D @uni-helper/uni-ui-types

安装完成后,在 tsconfig.json 中增加配置项

{
  "compilerOptions": {
    "types": [
      // ... ///
      "@uni-helper/uni-ui-types"
    ]
  },
  // ...
}

4、测试使用

随便复制一个组件在页面上面就可以直接使用,比如

<uni-card title="基础卡片" sub-title="副标题" extra="额外信息" thumbnail="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/unicloudlogo.png">
  <text>这是一个带头像和双标题的基础卡片,此示例展示了一个完整的卡片。</text>
</uni-card>

【uniapp】小程序开发:2 安装uni-ui组件库、使用pinia状态管理、自定义http请求,前端,uni-app,小程序

二、使用pinia做持久化

1、安装依赖包

pnpm install pinia
pnpm install pinia-plugin-persistedstate

如果启动时遇到错误"hasInjectionContext" is not exported by

可以卸载pinia重新安装指定指定版本

pnpm uninstall pinia
pnpm install pinia@2.0.36

2、编写持久化代码

1)创建src/stores/index.ts,内容如下:

import {createPinia } from 'pinia'
import persist from 'pinia-plugin-persistedstate'

const pinia = createPinia()
// 使用持久化存储插件
pinia.use(persist)
// 默认导出给main.ts使用
export default pinia
// 模块统一导出
export * from './modules/member'

2)编号member模块代码member.ts

// 定义 store
import { defineStore } from "pinia"
import { ref } from "vue"

export const useMemberStore = defineStore('member', () => {

    // 会员信息
    const profile = ref()
    // 保存会员信息
    const setProfile = (val: any) => {
        profile.value = val
    }

    // 清理会员信息
    const clearProfile = () => {
        profile.value = undefined
    }

    return {
        profile,
        setProfile,
        clearProfile,
    }
},
{   // 网页端写法
    // persist:true,
    // 小程序端写法
    persist: {
        storage: {
            getItem(key) {
                return uni.getStorageSync(key)
            },
            setItem(key, value) {
                uni.setStorageSync(key, value)
            }
        }
    }
}
)

3)在main.ts是引入

import { createSSRApp } from "vue";
import App from "./App.vue";
// 导入 pinia 实例
import pinia from "./stores";

export function createApp() {
  const app = createSSRApp(App);
  // 使用pinia
  app.use(pinia)
  return {
    app,
  };
}

3、在组件页面中使用

<template>
  <view class="content">
    <view>会员信息:{{ memberStore.profile }}</view>
    <button  plain size="mini" type="primary"
      @click="memberStore.setProfile({
        nickname:'我是管理员',
      })"
    >保存用户信息</button>
    <button  plain size="mini" type="warn"
      @click="memberStore.clearProfile()"
    >清空用户信息</button>
  </view>
</template>

<script setup lang="ts">
import { useMemberStore } from '@/stores';
const memberStore = useMemberStore()
</script>

<style>
.content {
  margin: 10px;
}
</style>

【uniapp】小程序开发:2 安装uni-ui组件库、使用pinia状态管理、自定义http请求,前端,uni-app,小程序

三、拦截http请求,处理请求参数,请求结果

1、增加请求拦截器,增加请求基础地址、增加自定义请求头、请求token、设置请求超时;
2、自定义http请求方法,处理请求响应结果数据,根据不同的返回代码处理响应结果

import { useMemberStore } from "@/stores";

const baseUrl = "http://127.0.0.1:8080"

const httpInterceptor = {
    // 拦截前触发
    invoke(options: UniApp.RequestOptions) {
        // 1. 增加基础地址
        if (!options.url.startsWith('http')) {
            options.url = baseUrl + options.url
        }
        // 2. 修改超时时间,默认 60s
        options.timeout = 30000
        // 3. 添加请求头
        options.header = {
            ...options.header,
            'source': 'mimiapp'
        }
        // 4. 添加token
        const memberStore = useMemberStore()
        const token = memberStore.profile?.token
        if (token) {
            options.header.Authorization = token
        }
        console.log(options);
    }
}
uni.addInterceptor('request', httpInterceptor)
uni.addInterceptor('uploadFile', httpInterceptor)
interface Resp<T> {
    code: string,
    message: string,
    result: T
}
/**
 * 请求函数
 */
export const http = <T>(options: UniApp.RequestOptions) => {
    // 1. 返回Promise对象
    return new Promise<Resp<T>>((resolve, reject) => {
        uni.request({
            ...options,
            //2. 响应成功
            success(res) {
                if (res.statusCode == 200 && res.statusCode < 300) {
                    resolve(res.data as Resp<T>)
                } else if (res.statusCode == 401) {
                    // 401错误 没有权限,跳转到登录页面
                    const memberStore = useMemberStore()
                    memberStore.clearProfile()
                    uni.navigateTo({ url: '/pages/login/login' })
                    reject(res)
                } else {
                    // 其他错误 根据错误信息提示
                    uni.showToast({
                        title: (res.data as Resp<T>).message || '请求错误',
                        icon: 'none',
                        mask: true
                    })
                    reject(res)
                }
            },
            // 响应失败
            fail(res) {
                uni.showToast({
                    title: res.errMsg,
                    icon: 'none',
                    mask: true
                })
                reject(res)
            },
        })
    })
}

在页面中使用文章来源地址https://www.toymoban.com/news/detail-709569.html

import {http} from '@/utils/http'
const getData =async ()=>{
 const res = await http<string[]>({
    url:'/api/user/login',
    method:'POST',
    data: {
      "loginName": "user",
      "password": "123"
    }
  })
  console.log(res);
}

到了这里,关于【uniapp】小程序开发:2 安装uni-ui组件库、使用pinia状态管理、自定义http请求的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【uniapp】在微信小程序中修改uni-ui组件样式不生效的解决方案

    在使用uniapp框架开发微信小程序时,使用到了uni-ui的uni-table组件。由于需要修改表头的背景色,于是乎在微信开发工具中使用调试工具审查元素获取其class名: 尝试直接在页面中修改样式: 结果无效。于是尝试使用深度选择器 依然无效。然后查询微信平台官方开发文档得知

    2024年02月02日
    浏览(48)
  • uniapp+vue3+vite+ts搭建项目引入uni-ui和uviewPlus组件库

    一、创建项目架构 首先使用官方提供的脚手架创建一个项目 在这里插入代码片 ,这里我创建的 vue3 + vite + ts 的项目: (如命令行创建失败,请直接访问 gitee下载模板) 二、下载依赖 启动 三、下载安装包 引入uni-ui src/package.json 文件配置easycom模式 引入uview-plus main.ts配置 u

    2024年02月13日
    浏览(40)
  • 使用uni-ui 实现下拉搜索框(uniapp+uni-ui+vue3 开发微信小程序)

    需求:输入框中输入内容--远端搜索匹配的选项--展示选项(可点击选择选项) 代码实现 htm:(一个输入框input + list) js: css

    2024年01月24日
    浏览(38)
  • uni-app自定义组件及拓展(uni-ui)组件的使用

    UniApp 是一个基于 Vue.js 的跨平台应用框架,可以用来开发同时运行在多个平台(如微信小程序、支付宝小程序、App等)的应用程序。在 UniApp 中,组件的使用与 Vue.js 中的组件使用基本类似,但需要考虑跨平台兼容性。 1. 创建组件文件 在 UniApp 项目中创建一个新的组件,通常

    2024年04月29日
    浏览(32)
  • uni-app扩展组件(uni-ui)

    目录 数字角标(uni-badge) 代码示例: 面包屑(uni-breadcrumb) 代码示例: 日历 代码示例 卡片(uni-card) 代码示例 倒计时(uni-countdown) 更多内容请访问官网 数字角标一般和其它控件(列表、9宫格等)配合使用,用于进行数量提示,默认为实心灰色背景。 使用方式是在HBuilder中创建项目

    2024年02月15日
    浏览(40)
  • uni-ui简单入门教程 - 如何用HBuilderX为uni-app项目启用uni-ui扩展组件?

    uni-app是一个前端框架 简单来说,uni-app的组件,类似HTML的标签,例如a转navigation、span转text等 uni-app的组件包括 基础组件  (自带免安装) + 扩展组件 (可选装, 官方出品uni-ui 或者第三方) uni-app出品的uni-ui官方手册很 坑爹 ,组件代码是一个文档,效果展示是另一个文档! 【u

    2023年04月08日
    浏览(42)
  • uni-ui组件库uni-icons不显示

    按照官方文档用yarn引用了uni-ui组件库并且在pages.json和vue.config.js中配置了相关的内容后使用uni-icon效果如下:   使用uni-icons的地方图标都未显示成功 1-按照 项目名称node_modules@dcloudiouni-uilibuni-icons目录找到uni-icons目录 2-将uni-icons目录放到src目录下的components目录下 3-在pages

    2024年02月15日
    浏览(30)
  • uni-ui安装

    在HBuilderX 新建uni-app项目的模板中,选择uni-ui模板即可使用 安装后node_modules文件夹内增加dcloudio文件夹 官方文档 注意 cli 项目默认是不编译 node_modules 下的组件的,导致条件编译等功能失效 ,导致组件异常 需要在根目录创建 vue.config.js 文件 ,增加 @dcloudio/uni-ui 包的编译即可

    2024年02月16日
    浏览(25)
  • uniapp collapse动态生成多个折叠面板手动展开收起(包括uni-ui版)

    官方文档没有暴露出相关api,那就看看组件源码。 以下示例均通过  vue-cli  创建的  uni-app  h5 项目 源码 node_modulesuview-uicomponentsu-collapse-itemu-collapse-item.vue 这个方法是用来改变折叠面板子组件收起还是展开的,根据改变 isShow 的值来实现 方法 源码 node_modules@dcloudiouni-ui

    2024年02月06日
    浏览(47)
  • uni-ui 中 uni-file-picker组件限制用户上传大小超过大小自动去除

    uni-ui 中 uni-file-picker组件限制用户上传大小超过大小自动去除 找到该组件位置打开uni-file-picker 在props中添加自己想起的名字绑定限制大小 找到chooseFileCallback方法插入代码: 其他页面调用即可

    2024年01月15日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包