当前位置: 首页 > news >正文

建设网站的技术/百度seo排名在线点击器

建设网站的技术,百度seo排名在线点击器,网站后台 全局配置,网站制作需求表引言 随着Vue 3的推出,Pinia应运而生,成为官方推荐的状态管理库,旨在替代Vuex。Pinia与Vuex相比,带来了以下主要区别和优势: 更简洁的API:Pinia的API设计更加直观和简洁,易于理解和使用。更好…

引言

随着Vue 3的推出,Pinia应运而生,成为官方推荐的状态管理库,旨在替代Vuex。Pinia与Vuex相比,带来了以下主要区别和优势:

  • 更简洁的API:Pinia的API设计更加直观和简洁,易于理解和使用。
  • 更好的TypeScript支持:Pinia从一开始就考虑了TypeScript的集成,使得类型安全的代码编写更加方便。
  • 模块化:Pinia支持模块化store,使得状态管理更加灵活和可扩展。
  • 无需映射辅助函数:Pinia不需要像Vuex那样使用map辅助函数,简化了组件中的状态访问。

说人话,升级版的vuex

Pinia简介

Pinia 是一个为 Vue.js 设计的状态管理库,它在 Vue 3 中得到了官方的支持。Pinia 的设计目标是提供一个简单、轻量级且可扩展的状态管理解决方案,它旨在替代 Vuex 4,后者是 Vue 2 的官方状态管理库。Pinia 的设计哲学是尽可能地简化状态管理,同时保持足够的灵活性以适应各种规模的应用。

Pinia的诞生背景和目标

随着 Vue 3 的推出,其引入了 Composition API,这为状态管理提供了新的可能性。Pinia 的诞生正是为了充分利用 Composition API 的优势,提供一个更加现代化和简洁的状态管理库。

Pinia与Vuex 4的主要区别

Pinia 与 Vuex 4 相比,引入了许多改进和新特性:

  • API 设计:Pinia 的 API 设计更加简洁,去除了 Vuex 4 中的一些复杂概念,如 mutations。
  • TypeScript 支持:Pinia 从一开始就考虑了 TypeScript 的集成,提供了更好的类型支持。
  • 模块化:Pinia 支持模块化 store,每个模块可以有自己的 state、getters、actions 和 mutations。
  • 无需映射辅助函数:在 Pinia 中,你不需要使用 mapState、mapGetters 等辅助函数,可以直接在组件中使用 store。

Pinia的核心概念(store、state、getters、actions)

Pinia 的核心概念与 Vuex 类似,但进行了简化和改进:

  • Store:Pinia 的 store 是状态管理的基本单位,每个应用可以有多个 store。一个 store 包含了应用状态(state)、计算属性(getters)、以及修改状态的方法(actions)。
  • State:State 是应用的当前状态,它是一个响应式的 JavaScript 对象。在 Pinia 中,state 可以是任何类型的数据。
  • Getters:Getters 类似于 Vue 的计算属性,它们是基于 state 的派生状态。Getters 可以用来返回经过计算或转换的 state,或者用来实现一些通用的逻辑。
  • Actions:Actions 是用来修改 state 的方法。在 Pinia 中,actions 可以是同步的,也可以是异步的。与 Vuex 不同,Pinia 不再区分 actions 和 mutations,所有的状态修改方法都称为 actions。

安装和设置Pinia

如何在Vue 3项目中安装Pinia

1.安装Pinia
使用npm或yarn来安装Pinia库。在项目根目录下打开终端,执行以下命令之一:

npm install pinia

或者

yarn add pinia

2.创建Pinia实例
在你的主文件(通常是main.jsmain.ts)中,引入并创建Pinia实例:

import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'const app = createApp(App)
const pinia = createPinia()app.use(pinia)
app.mount('#app')
创建第一个Pinia store的步骤

1.创建Store文件
在项目中创建一个新的文件夹,例如stores,并在其中创建一个新的文件,例如counterStore.js

2.定义Store
counterStore.js文件中,使用defineStore函数定义你的store

import { defineStore } from 'pinia'export const useCounterStore = defineStore('counter', {state: () => {return { count: 0 }},actions: {increment() {this.count++},decrement() {this.count--}}
})
在Vue组件中使用Pinia store

1.引入Store
在需要使用store的组件中,引入你刚才创建的store:

import { useCounterStore } from '@/stores/counterStore'

2.使用Store
在组件的setup函数中,使用useCounterStore来获取store实例,并访问其状态和方法:

import { useCounterStore } from '@/stores/counterStore'
import { ref } from 'vue'export default {setup() {const counterStore = useCounterStore()const count = ref(counterStore.count)function increment() {counterStore.increment()}function decrement() {counterStore.decrement()}return { count, increment, decrement }}
}

3.模板中使用
在组件的模板部分,你可以直接使用count变量和incrementdecrement方法:

<template><div><h1>Count: {{ count }}</h1><button @click="increment">Increment</button><button @click="decrement">Decrement</button></div>
</template>

使用pinia-plugin-persistedstate持久化存储(组件式为例)

下面是一个类似的示例,展示了如何在 Pinia store 中使用组件式的持久化存储:

import { defineStore } from 'pinia';
import { ref, computed } from 'vue';export const useCounterStore = defineStore('counter', () => {// 定义状态const count = ref(100);const msg = ref('hello pinia');// 定义方法const addCount = () => count.value++;const subCount = () => count.value--;// 定义计算属性const double = computed(() => count.value * 2);// 返回状态和方法return {count,addCount,subCount,double,msg,};
}, {// 持久化配置persist: {key: 'hahaha', // 持久化存储的键名paths: ['count', 'msg'], // 指定需要持久化的状态路径},
});

在这个示例中,我们定义了一个名为 useCounterStore 的 Pinia store,其中包含 count 和 msg 两个状态,以及 addCountsubCount 两个方法来修改 count 的值。我们还定义了一个计算属性 double,用于计算 count 的两倍。

在 persist 配置中,我们指定了 key 为 'hahaha',这将作为存储在本地存储中的键名。paths 数组包含了需要持久化的状态路径,这里我们指定了 count 和 msg

当热还有其他的persist配置,不太常用就不讲了,有兴趣的小伙伴可以去官网查看(结尾会放)

Pinia进阶特性

插件系统和自定义插件的创建

Pinia 提供了一个强大的插件系统,允许开发者扩展其功能。创建自定义插件可以让你添加全局状态、拦截actions、添加全局getters等。

1.创建插件
创建一个插件通常涉及定义一个函数,该函数接收一个Pinia实例作为参数,并对其进行操作。

export function myPiniaPlugin(pinia) {// 可以在这里添加全局状态、拦截actions等
}

2.使用插件
在创建Pinia实例时,可以将插件添加到实例中。

const pinia = createPinia()
pinia.use(myPiniaPlugin)
模块化store和命名空间

Pinia 支持模块化store,允许你将不同的状态逻辑分割到不同的文件中,提高代码的可维护性。

1.定义模块化store
在模块化store中,你可以定义自己的state、getters和actions。

// store/modules/counter.js
import { defineStore } from 'pinia'export const useCounterStore = defineStore('counter', {state: () => ({ count: 0 }),actions: {increment() {this.count++},decrement() {this.count--}}
})

2.使用命名空间
在模块化store中,你可以使用命名空间来避免不同模块间的命名冲突。

// store/modules/counter.js
import { defineStore } from 'pinia'export const useCounterStore = defineStore('counter', {state: () => ({ count: 0 }),actions: {increment() {this.count++},decrement() {this.count--}}
}, {// 开启命名空间namespaced: true
})

3.在组件中使用模块化store
在组件中,你可以通过命名空间来访问特定模块的状态和actions。

import { useCounterStore } from '@/stores/modules/counter'const counterStore = useCounterStore()
console.log(counterStore.count) // 使用命名空间访问状态
counterStore.increment() // 使用命名空间访问actions

 资料推荐

配置 | pinia-plugin-persistedstate官网

总结

掌握 Pinia 的使用,将有助于你在开发 Vue 3 应用时,更加高效地管理复杂的状态逻辑,提升应用的整体性能和用户体验。希望本文能为你在使用 Pinia 进行状态管理时提供有价值的参考和指导。

相关文章:

Vue 3与Pinia:下一代状态管理的探索

引言 随着Vue 3的推出&#xff0c;Pinia应运而生&#xff0c;成为官方推荐的状态管理库&#xff0c;旨在替代Vuex。Pinia与Vuex相比&#xff0c;带来了以下主要区别和优势&#xff1a; 更简洁的API&#xff1a;Pinia的API设计更加直观和简洁&#xff0c;易于理解和使用。更好…...

《植物大战僵尸杂交版》2.2版本:全新内容与下载指南

《植物大战僵尸杂交版》2.2版本已经火热更新&#xff0c;带来了一系列令人兴奋的新玩法和调整&#xff0c;为这款经典的塔防游戏注入了新的活力。如果你是《植物大战僵尸》系列的忠实粉丝&#xff0c;那么这个版本绝对值得你一探究竟。 2.2版本更新亮点 新增看星星玩法 这个新…...

探索Hash Router:构建单页应用的基石

前言 第一次看到Vue的路由模式的时候&#xff0c;有点分不清楚 createWebHashHistory()和 createWebHistory的区别&#xff0c;感觉功能也差不多。后来去搜了一下发现前面的那个叫做哈希模式&#xff0c;哈希模式通过URL的hash&#xff08;即#后面的部分&#xff09;来实现前端…...

MySQL中undo log、redo log 和 binlog三种日志的作用及应用场景

在 MySQL 数据库中&#xff0c;undo log、redo log 和 binlog 都是关键的日志类型&#xff0c;它们在数据恢复和事务管理中起着重要作用。 Undo Log&#xff08;回滚日志&#xff09; 作用&#xff1a;undo log 主要用于事务回滚和MVCC&#xff08;多版本并发控制&#xff09;。…...

javaweb零碎知识3

// 假设您已经导入了 axios import axios from axios;// 获取表单元素 const form document.getElementById(myForm);// 为表单添加 submit 事件监听器 form.addEventListener(submit, function(e) {// 阻止表单的默认提交行为e.preventDefault();// 创建 FormData 对象并从表…...

2024.7.9.小组汇报postman分享会

文章目录 一、前言&#xff08;一&#xff09;界面导航说明&#xff08;二&#xff09;发送第一个请求 二、基本功能&#xff08;一&#xff09;常见类型的接口请求(常见的接口有如下四种类型&#xff1a;1.查询参数的接口请求2.表单类型的接口请求3.上传文件的表单请求4.JSON …...

C语言文件操作-文件IO(系统调用)

文件IO (系统调用) 文件描述符open函数read函数write函数lseek函数close函数dup函数dup2函数 stat函数getpwuid函数getgrgid函数 实例 目录操作 opendir函数readdir函数rewinddir函数closedir函数实例 文件IO (系统调用) 文件IO就是系统调用&#xff0c;用户空间进入内核空间…...

LeetCode67(二进制求和[位运算,大数运算])

二进制求和 题目要求: 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 这道题其实有几种解法.我们先来介绍简单的方法. 我们可以将两个字符串的二进制转成十进制,获取对应值相加之后,我们可以不断对2取余,获取尾数拼接即可.也就是像我们平常求一…...

grep对文件内容搜索(附重要拓展-正则表达式)

文件搜索是搜索查找符合条件的某文件的目录&#xff0c;若要编辑文件或对文件的某配置进行修改&#xff0c;就需要对文件内容进行搜索。 grep 命令是 Linux 及类 Unix 操作系统中的一个强大的文本搜索工具&#xff0c;用于搜索一个或多个文件中匹配给定模式的行。grep 代表“Gl…...

前端JS特效第26波:jQuery日期时间选择器插件

jQuery日期时间选择器插件&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下&#xff1a; <!DOCTYPE html> <html> <head lang"zh-CN"> <meta charset"UTF-8"> <title>jQuery日期时间选择器插件 - PHP中文网</t…...

Anaconda+Pycharm 项目运行保姆级教程(附带视频)

最近很多小白在问如何用anacondapycharm运行一个深度学习项目&#xff0c;进行代码复现呢&#xff1f;于是写下这篇文章希望能浅浅起到一个指导作用。 附视频讲解地址&#xff1a;AnacondaPycharm项目运行实例_哔哩哔哩_bilibili 一、项目运行前的准备&#xff08;软件安装&…...

java面试-java基础(上)

文章目录 一、什么是Java&#xff1f;特点&#xff1f;二、什么是JVM、JDK、JRE&#xff1f;三、java跨平台实现原理四、java数据类型有哪些?五、char能不能存一个中文汉字?六、存在数字i加1小于i或者i减1小于i?七、什么是自动类型转换与强制类型转换?八、什么是装/拆箱&am…...

STM32快速搭建项目框架

注&#xff1a;编写本博客的原因&#xff0c;学习期间基于复习之前知识点的需要&#xff0c;故撰写本教程&#xff0c;即是复习前面的知识点也是作为博客的补充 1.0 文件夹的创建 创建一个STM32项目为模版工程&#xff0c;问价夹下分别包含4个子文件夹&#xff0c;一个是Librar…...

JMH324-免费【最后一战LOL】MOBA竞技版本+单机一键端+视频教程+文本教程

资源介绍&#xff1a; 修改前打开【D:\ZHServer】文件夹里的【[1]一键启动.bat】&#xff0c;游戏不要打开&#xff0c;否则修改失败。 修改完以后重启架设程序才会生效。 fball_gamedb1数据库——gameuser数据表 obj_name 角色名 obj_lv 等级 obj_diamond 钻石 obj_gold 8…...

WPF UI 3D 多轴 机械臂 stl 模型UI交互

1、三维插件环境调整 2、动态模型材质处理 3、动态模型鼠标交互 4、模型旋转基本思路 5、六轴机械臂节点旋转处理 6、更多HelixToolkit插件处理案例 7、快速对接Blender模型 鼠标交互&#xff08;没有强调场景的变换&#xff09; 鼠标命中测试&#xff08;HitTest 不推荐&…...

《金山 WPS AI 2.0:重塑办公未来的智能引擎》

AITOP100平台获悉&#xff0c;在 2024 世界人工智能大会这一科技盛宴上&#xff0c;金山办公以其前瞻性的视野和创新的技术&#xff0c;正式发布了 WPS AI 2.0&#xff0c;犹如一颗璀璨的星辰&#xff0c;照亮了智能办公的新征程&#xff0c;同时首次公开的金山政务办公模型 1.…...

RT2-使用NLP的方式去训练机器人控制器

目标 研究在网络数据上训练的视觉语言模型也可以直接结合到端到端的机器人控制中&#xff0c;提升泛化性以及获得突出的语义推理&#xff1b;使得单个的端到端训练模型可以同时学习从机器人观测到动作的映射&#xff0c;这个过程可以受益于基于网络上的语言和视觉语言数据的预训…...

VisActor vs ECharts: 哪个更适合你的数据可视化需求?

VisActor vs ECharts: 哪个更适合你的数据可视化需求&#xff1f; 在当今数据驱动的世界里&#xff0c;选择合适的数据可视化工具是至关重要的。ECharts作为广受欢迎的可视化库&#xff0c;已经在行业内拥有了长久的历史和广泛的用户基础。然而&#xff0c;VisActor作为新兴的…...

【QT中实现摄像头播放、以及视频录制】

学习分享 1、效果图2、camerathread.h3、camerathread.cpp4、mainwindow.h5、mainwindow.cpp6、main.cpp 1、效果图 2、camerathread.h #ifndef CAMERATHREAD_H #define CAMERATHREAD_H#include <QObject> #include <QThread> #include <QDebug> #include &…...

el-table封装popver組件,点击列筛选行数据功能,支持筛选,搜索,排序功能

子组件&#xff1a; <template><div class"tableTool" ref"tableTool" click.stop><el-button click"shengFnc">升序</el-button><el-button click"jiangFnc">降序</el-button><el-input v-m…...

基于DPU的云原生计算资源共池管理解决方案

1. 方案背景和挑战 在传统的云环境中&#xff0c;通常存在着不同的技术栈&#xff0c;支撑多样化的计算服务&#xff0c;具体如下&#xff1a; ① OpenStack环境与虚拟化云主机及裸金属服务 OpenStack是一个开源的云计算管理平台项目&#xff0c;它提供了部署和管理大规模计…...

Bugly并非无所不能

在 iOS 应用因为内存占用过大而被系统 killed 的情况下&#xff0c;Bugly 以及大多数崩溃报告工具是无法捕获到这种类型的崩溃信息的。原因在于&#xff0c;当系统由于内存压力过大而终止应用时&#xff0c;是直接将应用进程杀死&#xff0c;不会触发常规的崩溃处理流程&#x…...

2024年信息系统项目管理师1批次上午客观题参考答案及解析(3)

51、探索各种选项&#xff0c;权衡包括时间与成本、质量与成本、风险与进度、进度与质量等多种因素&#xff0c;在整个过程中&#xff0c;舍弃无效或次优的替代方案&#xff0c;这种不确定性应对方法是()。 A&#xff0e;集合设计 B&#xff0e;坚韧性 C&#xff0e;多种结果…...

YOLOv8改进 | 注意力机制 | 对密集和小目标友好的EVAblock 【原理 + 完整代码】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…...

高效前端开发:解密pnpm的存储与链接

什么是pnpm PNPM&#xff08;Performant NPM&#xff09;是一种快速且节省磁盘空间的包管理工具。相较于其他包管理器如NPM和Yarn&#xff0c;PNPM通过独特的存储机制和链接技术解决了许多常见的问题。以下是PNPM如何避免这些问题以及其关键技术的详细介绍。 特性 PNPM Store…...

设置单实例Apache HTTP服务器

配置仓库 [rootlocalhost ~]# cd /etc/yum.repos.d/ [rootlocalhost yum.repos.d]# vi rpm.repo仓库代码&#xff1a; [BaseOS] nameBaseOS baseurl/mnt/BaseOS enabled1 gpgcheck0[AppStream] nameAppStream baseurl/mnt/AppStream enabled1 gpgcheck0挂载 [rootlocalhost …...

Python | Leetcode Python题解之第221题最大正方形

题目&#xff1a; 题解&#xff1a; class Solution:def maximalSquare(self, matrix: List[List[str]]) -> int:if len(matrix) 0 or len(matrix[0]) 0:return 0maxSide 0rows, columns len(matrix), len(matrix[0])dp [[0] * columns for _ in range(rows)]for i in…...

使用Python实现线性拟合

如下 Python 代码主要用于处理和分析数据&#xff0c;并使用 Matplotlib 库绘制出数据的拟合曲线。它的主要步骤包括数据预处理、进行线性回归分析&#xff0c;并根据结果绘图展示。下面是对代码及其所引用库的详细解释&#xff1a; 引用的库 numpy (np): 用于进行数值计算。这…...

如何在浏览器控制台Console中引入外部 JS

想要在某个网页执行一些脚本&#xff0c;却发现某个工具类&#xff0c;如 ajax 请求的 axios 该网页没有引入&#xff0c;或者引入了但控制台却访问不到&#xff0c;这时要怎么办呢&#xff1f; 只需要控制台执行如下代码就好了 var script document.createElement(script);…...

后端——全局异常处理

一、老办法try-catch 当我们执行一些错误操作导致程序报错时&#xff0c;程序会捕捉到异常报错&#xff0c;这个异常会存在一个Exception对象里 那我们在spring boot工程开发时&#xff0c;当我们执行一个sql查询时报错了&#xff0c;那就会从最底层的Mapper层捕捉到Exceptio…...