uni-app基于vite和vue3创建并集成pinia实现数据持久化

一、uni-app基于Vite和Vue3创建并集成pinia实现数据持久化

文章目录

  • 一、uni-app基于Vite和Vue3创建并集成pinia实现数据持久化
    • 1.如何创建基于Vite和Vue3的uni-app项目?
    • 2.选择其中一个分支,就是一个脚手架
  • 二、以下都是基于vite-ts版本创建和配置
    • 1.目录结构
    • 2.启动命令【微信小程序】
  • 三、配置uni-app集成uview-plus
    • 1.npm安装方式
    • 2.由于使用了TS,则配置完uview-plus之后会报错
    • 3.又因为tsconfig.json中扫描.d.ts文件的路径如下
    • 4.此处选择自行创建文件解决
  • 四、集成pinia实现状态管理
    • 1.main.ts配置如下
    • 2.piniaStore配置
  • 五、配置pinia的数据持久化
    • 1.配置支持uni-app的pinia持久化插件
    • 2.main.ts完整配置
    • 3.别忘了TS的支持
      • 4.修改vite默认5173的端口号

1.如何创建基于Vite和Vue3的uni-app项目?

DCloud 官方Gitee仓库 https://gitee.com/dcloud/uni-preset-vue
在这里插入图片描述

Gitee官方仓库提供了各种版本的uni-app的脚手架,可以自行选择直接使用。

在这里插入图片描述

2.选择其中一个分支,就是一个脚手架

常用的有vite(vite+vue3+js)、vite-ts(vite+vue3+ts)、vue3(基于uni-app的vue3版本:webpack)
版本可以自行选择

二、以下都是基于vite-ts版本创建和配置

克隆项目

git clone https://gitee.com/dcloud/uni-preset-vue.git

在这里插入图片描述

1.目录结构

在这里插入图片描述

2.启动命令【微信小程序】

在这里插入图片描述

三、配置uni-app集成uview-plus

注意:如果是vue2的版本,选择uview-ui;如果是vue3的版本选择uview-plus

uview-ui官网 https://www.uviewui.com/
在这里插入图片描述
uview-plus官网 https://uiadmin.net/uview-plus/
在这里插入图片描述

注意:因为当前项目是基于vite+vue3的框架,所以选择使用uview-plus版本,又因为是从仓库克隆的,所以安装方式是脱离了Hbuilder X软件而使用VSCode开发,所以选择npm的方式安装!

1.npm安装方式

npm安装方式1 https://uiadmin.net/uview-plus/components/npmSetting.html
在这里插入图片描述
npm安装方式2 https://uiadmin.net/uview-plus/components/install.html#npm方式
在这里插入图片描述

2.由于使用了TS,则配置完uview-plus之后会报错

在这里插入图片描述

3.又因为tsconfig.json中扫描.d.ts文件的路径如下

在这里插入图片描述
所以,要么更改扫描路径,要么自行创建对应路径文件,配置解决。

4.此处选择自行创建文件解决

在这里插入图片描述
在src下创建typings文件夹,自定义.d.ts文件,加上一行如下声明,即可解决uview-plus引入报错问题;

declare module "uview-plus";

在这里插入图片描述

四、集成pinia实现状态管理

因为是集成的vite+vue3的uni-app项目,官方更新不是那么及时,所以pinia不能使用最新版本,需要降级:"pinia": "^2.0.33"

pinia官方文档 https://pinia.vuejs.org/zh/
在这里插入图片描述

npm i pinia@2.0.33 -S

1.main.ts配置如下

import { createSSRApp } from "vue";
import App from "./App.vue";
import uviewPlus from "uview-plus";
import * as Pinia from "pinia";

export function createApp() {
    const app = createSSRApp(App);

    app.use(uviewPlus);

    // 1.创建pinia的实例
    const pinia = Pinia.createPinia();
    // 2.注册到app实例中
    app.use(pinia);

    return {
        app,
        Pinia, // 3.必须导出Pinia
    };
}

2.piniaStore配置

import { defineStore } from "pinia";
import { ref } from "vue";

type AppStoreType = {
    count: number;
};

// 第一种写法
export const useAppStore1 = defineStore({
    id: "appStore",
    state: (): AppStoreType => ({
        count: 0,
    }),
});

// 第二种写法(推荐)
export const useAppStore2 = defineStore("appStore", {
    state: (): AppStoreType => ({
        count: 0,
    }),
    actions: {
        addCar(item: any) {}
    },
});
// 第三种写法
export const useAppStore3 = defineStore("appStore", () => {
    const count = ref(0);

    return {
        count,
    };
});

五、配置pinia的数据持久化

注意:虽然使用了vue3,但是不是最新的vue3,所以pinia也不是最新的pinia,不能使用官方提供的数据持久化的插件

pinia官方提供的持久化插件 https://prazdevs.github.io/pinia-plugin-persistedstate/zh/
在这里插入图片描述

1.配置支持uni-app的pinia持久化插件

pinia支持uni-app的持久化插件 https://www.npmjs.com/package/pinia-plugin-persist-uni
在这里插入图片描述

npm i pinia-plugin-persist-uni

在这里插入图片描述

2.main.ts完整配置

import { createSSRApp } from "vue";
import App from "./App.vue";
import uviewPlus from "uview-plus";
import * as Pinia from "pinia";
import piniaPersist from "pinia-plugin-persist-uni";

export function createApp() {
    const app = createSSRApp(App);

    app.use(uviewPlus);

    // 1.创建pinia的实例
    const pinia = Pinia.createPinia();
    pinia.use(piniaPersist);
    app.use(pinia);

    return {
        app,
        Pinia, // 2.必须导出Pinia
    };
}

3.别忘了TS的支持

在这里插入图片描述

import { defineStore } from "pinia";

type AppStoreType = {
    count: number;
};

export const useAppStore2 = defineStore("appStore", {
    persist: {
        enabled: true, // 开启持久化
        strategies: [
            {
                key: "appStore", // 持久化的key
                storage: window?.localStorage, // 持久化的方式,可以选择sessionStorage
            },
        ],
    },
    state: (): AppStoreType => ({
        count: 0,
    }),
    actions: {
        addCar(item: any) {},
    },
});

4.修改vite默认5173的端口号

vite.config.ts

import { defineConfig } from "vite";
import uni from "@dcloudio/vite-plugin-uni";

// https://vitejs.dev/config/
export default defineConfig({
    plugins: [uni()],
    server: {
        port: 8080 // 默认是5173
    }
});

如此,基于vite和vue3的uni-app小程序就创建完成啦,快去试试吧~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第一章 Object-XML 映射简介

文章目录 第一章 Object-XML 映射简介基础如何工作的映射选项IRIS 中的相关工具XML 文档的可能应用 第一章 Object-XML 映射简介 基础 将对象映射到 XML 一词意味着定义如何将该对象用作 XML 文档。要将对象映射到 XML,请将 %XML.Adaptor 添加到定义该对象的类的超…

线性代数-Python-04:线性系统+高斯消元的实现

文章目录 1 线性系统2 高斯-jordon消元法的实现2.1 Matrix2.2 Vector2.3 线性系统 3 行最简形式4 线性方程组的结构5 线性方程组-通用高斯消元的实现5.1 global5.2 Vector-引入is_zero5.3 LinearSystem5.4 main 1 线性系统 2 高斯-jordon消元法的实现 2.1 Matrix from .Vecto…

搭建完全分布式Hadoop

文章目录 一、Hadoop集群规划二、在主节点上配置Hadoop(一)登录虚拟机(二)设置主机名(三)主机名与IP地址映射(四)关闭与禁用防火墙(五)配置免密登录&#xff…

根据DataFrame指定的列该列中如果有n个不同元素则将其转化为n行显示explode()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 根据DataFrame指定的列 该列中如果有n个不同元素 则将其转化为n行显示 explode() 选择题 以下代码两次输出结果分别为几行? import pandas as pd df pd.DataFrame({种类:[蔬菜,水…

什么是 CASB,在网络安全中的作用

数字化转型正在稳步攀升,组织现在越来越关注在线生产力系统和协作平台,各行各业的企业都采用了不同的云基础设施服务模式。云基础架构提供按需服务,可提高易用性、访问控制、内容协作和减少内部存储资源,以及许多其他好处。迁移到…

【Mysql】查询mysql的版本

目录 cmd命令查询 mysql -- help(命令) mysql -u root -p(命令) 数据库管理工具查询 select version(); cmd命令查询 mysql -- help(命令) mysql -u root -p(命令) 执行该命令并且输入数据库密码 数据库管理工具查询 selec…

DAY50 309.最佳买卖股票时机含冷冻期 + 714.买卖股票的最佳时机含手续费

309.最佳买卖股票时机含冷冻期 题目要求:给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不…

如何解决msvcr90.dll文件丢失,电脑丢失msvcr90.dll什么意思

在计算机使用过程中,我们可能会遇到一些错误提示,比如“msvcr90.dll丢失”。这是因为msvcr90.dll是Microsoft Visual C 2008运行库的一部分,当这个文件丢失或者损坏时,就会导致程序无法正常运行。那么,如何解决这个问题…

麒麟V10系统下编译libcef_dll

目录 前言1、下载cef2、编译libcef_dll2.1 问题一 cmake版本太低2.2 问题二 无法识别的编译选项 -m64 3、总结 前言 本篇主要记录了在飞腾PC麒麟V10系统下编译libcef_dll时遇到的问题及解决方法。在Qt应用程序中使用QWebEngine加载HTML网页算是常规操作,但是涉及到…

Clickhouse SQL

insert insert操作和mysql一致 标准语法:insert into [table_name] values(…),(….)从表到表的插入:insert into [table_name] select a,b,c from [table_name_2] update 和 delete ClickHouse 提供了 Delete 和 Update 的能力,这类操作…

[100天算法】-最短无序连续子数组(day 70)

题目描述 给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。示例 1:输入: [2, 6, 4, 8, 10, 9, 15] 输出: 5 解释: 你只需要…

【计算机网络笔记】Internet网络的网络层——IP协议之IP数据报的结构

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

WebDAV之π-Disk派盘 + Keepass2Android

推荐一款密码管理器,允许人们使用复杂的组合进行登录,而不必记住所有的组合。 Keepass2Android可以支持大多数安卓互联网浏览器, Android设备上同步软件,还支持通过WebDAV添加葫芦儿派盘。 Keepass2Android 目前安全方面最大的问题之一是大多数人几乎在任何地方都使用通用…

windows下安装es及logstash、kibna

1、安装包下载 elasticsearch https://www.elastic.co/cn/downloads/past-releases#elasticsearch kibana安装包地址: https://www.elastic.co/cn/downloads/past-releases/kibana-8-10-4 logstash安装包地址: https://www.elastic.co/cn/downloads/past…

18 Linux 阻塞和非阻塞 IO

一、阻塞和非阻塞 IO 1. 阻塞和非阻塞简介 这里的 IO 指 Input/Output(输入/输出),是应用程序对驱动设备的输入/输出操作。当应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式 IO 就会将对应应用…

CVE-2023-25194 Kafka JNDI 注入分析

Apache Kafka Clients Jndi Injection 漏洞描述 Apache Kafka 是一个分布式数据流处理平台,可以实时发布、订阅、存储和处理数据流。Kafka Connect 是一种用于在 kafka 和其他系统之间可扩展、可靠的流式传输数据的工具。攻击者可以利用基于 SASL JAAS 配置和 SASL …

文本生成高精准3D模型,北京智源AI研究院等出品—3D-GPT

北京智源AI研究院、牛津大学、澳大利亚国立大学联合发布了一项研究—3D-GPT,通过文本问答方式就能创建高精准3D模型。 据悉,3D-GPT使用了大语言模型的多任务推理能力,通过任务调度代理、概念化代理和建模代理三大模块,简化了3D建模的开发流程…

Linux 进程的管道通信

文章目录 无名管道pipe有名管道 进程之间的通信:Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另外一个进程中都看不到,所以进程之间不能相互访问,要交换数据必须通过…

java学习part01

15-Java语言概述-单行注释和多行注释的使用_哔哩哔哩_bilibili 1.命令行 javac编译出class文件 然后java运行 2. java文件每个文件最多一个public类 3.java注释 单行注释 // 多行注释 文档注释 文档注释内容可以被JDK提供的工具javadoc所解析,生成一套以网页文…

赛氪ETTBL全国商务英语翻译大赛入榜国内翻译赛事发展评估报告

中国外文局下属CATTI项目管理中心出具2023 国内翻译赛事发展评估报告,ETTBL全国商务英语翻译大赛赫然在榜 2023年11月6日,继2022年首次发布国内翻译赛事发展评估报告后,中国外文局CATTI项目管理中心和中国外文界平台联合发布了《2023国内翻译…