首页 > 其他分享 >【UniApp】-uni-app-pinia存储数据

【UniApp】-uni-app-pinia存储数据

时间:2023-12-19 09:34:52浏览次数:31  
标签:count UniApp pinia app Pinia uni counterStore

前言

  • 经过上个章节的介绍,大家可以了解到 uni-app-数据缓存 的基本使用方法
  • 那本章节来给大家介绍一下 uni-app-pinia存储数据 的基本使用方法
  • 经过我这么多篇章的介绍,我发现大家环境比较耗时,所以在今后的文章中,我会尽量减少环境的搭建
  • 如果某一篇的文章环境确实是不一样的,我会在文章中说明,然后编写对应的搭建过程

本文的由来呢,就是因为在 Vue2 中与 Vue3 中都可以使用 Vuex 来进行数据的存储, 但是在 Vue3 出现了 Pinia,所以我就想着在 uni-app 中使用 Pinia 来进行数据的存储。

步入正题

首先来给大家看看官方文档吧,在文档中找到, uni-app -> 教程 -> vue语法,先来看 Vue2:

可以从图中看到,在 Vue2 当中的存储方式只有 Vuex,然后再来看看 Vue3:

多了一个 Pinia,好,知道了这些内容之后我就来开始写代码编写示例,带大家过一遍。

  • 使用 UniApp 创建的项目是内置了 Pinia,Vue2 项目暂不支持

根据官方文档的介绍,首先我们需要搭建一个对应的目录结构:

├── pages
├── static
└── stores
    └── counter.js
├── App.vue
├── main.js
├── manifest.json
├── pages.json
└── uni.scss

就是创建一个 stores 文件夹,在该文件夹下创建对应模块的 js 文件。

  • 创建一个默认模板项目,基于 Vue3
  • 创建好项目之后,首先更改 main.js,导入 pinia,注册 pinia,导出 pinia

Pinia

配置 Pinia

导入 Pinia:

import * as Pinia from 'pinia';

注册 Pinia:

app.use(Pinia.createPinia());

导出 Pinia:

return {
    app,
    // 此处必须将 Pinia 返回
    Pinia,
}

使用 Pinia

首先在 stores 文件夹下,创建 counter.js,内容如下:

import {
	defineStore
} from 'pinia';

export const useCounterStore = defineStore('counter', {
	state: () => {
		return {
			count: 0
		};
	},
	// 也可以这样定义
	// state: () => ({ count: 0 })
	actions: {
		increment() {
			this.count++;
		},
		decrement() {
			this.count--;
		},
	},
});

如上代码通过 defineStore 定义了一个名为 counter 的 store,然后通过 state 定义了一个 count 的状态,然后通过 actions 定义了两个方法,分别是 increment 和 decrement,分别用来增加和减少 count 的值。

再接着在首页页面,添加两个按钮分别是增加与减少调用 store 中的方法:

<template>
	<view>
		{{ count }}
		<button type="primary" @click="myIncrement">增加</button>
		<button type="primary" @click="myDecrement">减少</button>
	</view>
</template>

<script setup>
	import {
		useCounterStore
	} from '@/stores/counter.js'
	import {
		storeToRefs
	} from 'pinia'

	const counterStore = useCounterStore()

	const {
		count
	} = storeToRefs(counterStore)

	function myIncrement() {
		counterStore.increment()
	}

	function myDecrement() {
		counterStore.decrement()
	}
</script>

代码我写完了,先来看运行的效果,然后我在一一解释代码:

  • 如上代码的含义首先在 script setup 中导入了 useCounterStore,然后通过 useCounterStore 创建了一个 counterStore
  • 然后通过 storeToRefs 将 counterStore 中的 count 转换成了 ref,然后在模板中通过 {{ count }} 将 count 的值显示出来
  • 然后通过 @click 调用 myIncrement 和 myDecrement 方法,然后在 myIncrement 和 myDecrement 方法中调用了 counterStore 中的 increment 和 decrement 方法
  • 然后通过 counterStore.increment() 和 counterStore.decrement() 调用了 store 中的方法

好,到这已经结束了,是不是很简单,我就不多说了,大家可以自己去尝试一下。

这个存储的是全局的数据,大家还可以新建一个 one 页面,配置一下 tabBar 在 one 页面中从 store 中获取 count 的值, 显示一下即可,在首页操作之后 one 页面的 count 的值也会发生变化。

End

  • 如果你有任何问题或建议,欢迎在下方留言,我会尽快回复
  • 如果你觉得本文对你有帮助,欢迎点赞、收藏,你的支持是我写作的最大动力

标签:count,UniApp,pinia,app,Pinia,uni,counterStore
From: https://www.cnblogs.com/BNTang/p/17912880.html

相关文章

  • 第三章:@RequestMapping注解
    一、搭建框架二、控制器中有多个方法对应同一个请求的情况三、@RequestMapping注解标识的位置四、@RequestMapping注解的value属性五、@RequestMapping注解的method属性六、@RequestMapping注解结合请求方式的派生注......
  • 【Azure App Service】当App Service中使用系统标识无法获取Access Token时
    问题描述AppSerive上的应用配置了系统标识(SystemIdentity),通过系统标识获取到访问KeyVault资源的AccessToken。但这次确遇见了无法获取到正常的AccessToken。 验证问题1:查看AppService的门户中是否启用了系统标识  2:进入AppService的Kudu站点,查看Environment参数中IDENT......
  • ios开发跳转某宝app
    在iOS开发中,跳转到某宝App是一个常见的需求。当用户点击一个链接或按钮时,我们希望能直接打开某宝App并显示相关页面,而不是在浏览器中打开。跳转到某宝App可以提供更好的用户体验,因为某宝App通常会提供更多功能和更友好的界面。要实现这个功能,我们需要使用iOS提供的URLScheme来调起......
  • 关于Pinia 使用setup方式书写 $reset方法失效问题
    在当我使用的时候踩到一个坑:当我在使用$reset想要重置state数据的时候,却报错了,经过排查发现是因为没有使用选项式进行编写代码关于$reset方法Pinia文档中只有简短的介绍:您可以通过调用store上的$reset()方法将状态重置到其初始值:conststore=useStore()store.$res......
  • 什么是uniapp?如何开发uniapp?
    大家好!我是咕噜铁蛋!随着移动应用市场的持续发展,开发者们面临着不断增长的需求和多样化的平台选择。在这个背景下,UniApp应运而生,成为一种跨平台开发框架,为开发者提供了一种高效、简便的方式来开发移动应用程序。利用UniApp开发应用程序可以节省时间和精力,同时还能够在多个平台上扩展......
  • pinia初学习
    pinia两种写法定义pinia第一种:对象形式不需要写refstate直接就是响应式数据import{defineStore}from"pinia"exportconstuseCounterStore=defineStore("useCounterStore",{state:()=>{return{}},actions:{......
  • 想要认证WhatsApp绿勾?看这一篇文章就够
    在WhatsApp里面经常会出现很多伪装成官方账号的冒充账号。WhatsApp绿勾作为一种官方授予的标识可以帮助用户准确识别并区分出真正的官方账号,避免被冒充账号而误导。而且企业获得WhatsApp绿勾后,即使用户是第一次收到您的信息,信息也不会显示「封锁」或「举报」的选项,因为 WhatsApp ......
  • 详解appium自动化测试工具(monitor、uiautomatorviewer)
    appium是一个自动化测试开源工具,支持iOS和Android平台上的原生应用,web应用和混合应用。移动原生应用:单纯用ios或者android开发语言编写的、针对具体某类移动设备、可直接被安装到设备里的应用,一般可通过应用商店获取,比如某个游戏app;移动web应用:使用移动浏览器访问的应用(appium支......
  • 【UniApp】-uni-app-数据缓存
    前言好,经过上个章节的介绍完毕之后,给大家补充了一下uni-app-数据传递的内容那么补充了uni-app-数据传递的内容之后,这篇文章来给大家介绍一下uni-app-数据缓存搭建项目首先我们还是要先搭建一个项目,这里我就不多说了,大家可以参考上一篇文章搭建好项目之后,我们就可以开......
  • uniapp Watch() 数据监控完成升级
    handleDataChange(){ if(this.allquestions<50){ this.rank=1 this.rankpic='https://imgs.91yuwen.com/resouse/%E5%BE%BD%E7%AB%A0/11.png' this.rankrate=Number(this.allquestions)/50*100 console.log('进入1�......