首页 > 其他分享 >pinia初学习

pinia初学习

时间:2023-12-18 16:57:28浏览次数:27  
标签:const 学习 state num pinia return store

pinia

两种写法定义pinia

第一种:对象形式

不需要写ref state直接就是响应式数据

import { defineStore } from "pinia"
export const useCounterStore = defineStore("useCounterStore ", {
    state:() =>{
        return{
            
        }
    },
    actions:{
        
    },
    getters:{
        
    }
})

第二种: 匿名函数形式

需要写ref定义state 不然不是响应式 用了ref 在actions和getters中使用的时候就需要.value

import { defineStore } from "pinia"
import { ref, computed } from "vue"
export const useCounterStore = defineStore("useCounterStore ", () => {
    let num = ref(1)  // 自动识别为state

    const dobuleNum = computed(() => {  // 使用了computed 自动识别为计算属性
        return num.value * 2
    })
    function addNum(){
        //自动识别为actions pinia没有muctions了  actions就可以同步异步都可以
    }
    return {
        num, dobuleNum,addNum
    }
})

state

重置状态

将state的状态重置到初始值

let data = useCountPinia()
data.$reset()  //重置
同时修改多个状态
// 第一种方法 接受一个对象
let data = useCountPinia()
data.$patch({
    name:xxx,
    num:xxx
})
// 第二种方法:接受一个函数
data.$patch((state)=>{
    state.name = xxxx
    state.num = xxx
})
替换整个state

通过 store.$state = {}来替换

let data = useCountPinia()
data.$state = {
    xxx
}
订阅状态

在vue中可以使用watch来对vuex的数据进行监听 但是如果想在js中使用的话就要借助$subscribe

vuex中也有$subscribe 具体看文档吧

pinia中的$subscribe写法如下

import { useCountPinia } from "@/store/index"
const data = useCountPinia()
data.$subscribe((mutation,state)=>{  // mutation是记录state变化信息的对象   state是state对象
    // 修改state之后会触发此回调函数
})

// 分析mutation和state是什么
// mutaton:
{
    "type": "patch function",  // 修改的类型 
        /** 
        	"patch function"通过$patch传入函数修改
            "patch object" 通过$patch传入对象修改
        	"direct" 直接修改state
        */
    "storeId": "useCounterStore ",  // 库的id
    "events": [   // 存储变化的数据信息
        {...}
    ]
}
// state
是一个Proxy对象 是state的代理对象

那么 watchsubscribe 捕获数据变化的区别是什么?

watch只会捕获新旧值不同的情况

subscribe不仅会捕获新旧值不同 只要是进行修改 就会捕获

二、Getters

箭头函数没有this所以需要使用接收参数state来实现

getters: {
    // 自动将返回类型推断为数字
    doubleCount(state) {
      return state.counter * 2
    },
    // 返回类型必须明确设置
    doublePlusOne(): number {
      return this.counter * 2 + 1
    },
    doubleNum:(state) =>{
        return state.num *2
    }
  },

传递参数给getter

没有办法直接获取 但是可以再返回一个函数 在这个函数中去接收

 doubleNum:(state) =>{
     return (value) =>{  // 接收的参数
         return state.num + value
     }
 }
<h1> 
    {{store.doubleNum('我是传参')}}
</h1>

需要注意的是 当使用了传参之后 getter则不再缓存 只是您调用的参数

三、Actions

Actions相当于组件中的methods 可以使用actions进行定义

export const useStore = defineStore('main',() =>{
    state:()=>{
        return {
            num:0
        }
    },
    actions:{
        add(){
            this.num ++
        }
    }
})

actions可以是异步的 代替了vuex 中的mutations

订阅actions

xxxxxxx

四、plugins

用于补充扩展store。本质其实就是一个函数,可以有以下操作

  • 向Store添加新属性
  • 定义Store时添加新选项
  • 为Store添加新方法
  • 包装现有方法
  • 更改甚至取消操作
  • 实现本地存储等副作用
  • 仅适用于特定Store

在mian.js文件中使用pinia.use()将插件添加到pinia实例中。下面举例为所有的store添加一个静态属性

//main文件
import { createPinia } from "pinia"
// 为安装此插件后创建的每个store添加一个名为 `level` 的属性
function SecretPiniaPlugin() {   
    return { 
    	level:'1.982'
    }
}
// 将插件提供给pinia
const pinia = createPinia()
pinia.use(SecretPiniaPlugin)

// 在另一个文件中
const store = useStore()
store.level // 'the cake is a lie'
添加新属性

有两种写法

// 第一种
const pinia = createPinia()
pinia.use(()=>{
    return {
        name:'我是第一种'
    }
})
// 第二种
const pinia = createPinia()
pinia.use(({store}) =>{
    store.name = "我是第二种"
})

标签:const,学习,state,num,pinia,return,store
From: https://www.cnblogs.com/zxl327/p/17911621.html

相关文章

  • elasticsearch学习1
    springData集成的各种数据框架版本和具体spring使用的各数据项目的版本不是同一个概念,默认都是各个框架的最新版 各版本框架  Outofmaintenance 停止维护 一直没搞清楚springboot中的依赖版本和真正在电脑上下载的服务器上的数据库集群版本有什么区别,区别就是......
  • dmv1靶机学习
    信息收集在kali的系统进入界面我们通过账号kali登录机(账号密码均为kali),登录完成后我们通过终端命令来确认一下本机网络地址, 在命令行输入ifconfig192.168.66.129子网掩码是255.255.255.0,由此我们可以判断场景处于局域网192.168.66.0/24内部接下来我们通过nmap命令工具来扫描一下......
  • 大语言模型与传统机器学习的架构差异性解析
    在人工智能领域,架构设计是决定一个模型性能和应用范围的关键因素。大语言模型和传统机器学习有不同的设计框架,使得它们在应用场景和处理任务上具有显著差异。大语言模型,如GPT和BERT,基于庞大而复杂的神经网络结构构成,这些神经网络结构拥有数百万甚至数十亿的参数,能够学习和理解大量......
  • 《Java编程思想第四版》学习笔记49--关于第十三章习题
    (9)增加Frog.class到本章出现的清单文件中并运行jar以创建一个包括Frog和BangBean的JAR文件。现在从SUN公司处下载并安装BDK或者使用我们自己的可激活Bean的程序构建工具并增加JAR文件到我们的环境中,因此我们可以测试两个Bean。(10)创建我们自己的包括两个属性......
  • vimtutor学习笔记
    进入vimtutor#ubuntusystemvimtutorlesson2.3:onoperatorsandmotions许多处理文本的命令由operators和motions组成,格式如下:#使用时operator和motion之间无空格,例如:dwoperatormotion常用的motions:w-跳到下个单词的开始,不包含其第一个字符e-跳到当前单词......
  • 进一步学习 CommunityToolkit.Mvvm
    1.属性绑定privatestringtitle;publicstringTitle{get;set;} 可用以下属性方式替换,生成器会自动生成;[ObservableProperty]privatestringtitle; 另一种情况:命令privateboolisEnabled;publicboolIsEnabled{......
  • 进一步学习 CommunityToolkit.Mvvm 之 Messenger
    一、带token1.订阅消息WeakReferenceMessenger.Default.Register<UserMessage,string>(this,"MyToken",(r,m)=>{});2.发送消息WeakReferenceMessenger.Default.Send(newUserMessage(value),"MyToken");二、某一种数据类型发送接收消息1.订阅消息V......
  • Spring Boot学习随笔- JSP小项目-员工管理系统(验证码生成、增删改查)
    学习视频:【编程不良人】2021年SpringBoot最新最全教程第十章、项目开发实现一个登录注册,增删改查功能的系统10.1项目开发流程需求分析分析用户主要需求提取项目核心功能,根据核心功能构建页面原型库表设计:分析系统有哪些表分析表之间关联关系确定字段详细设......
  • NoSQL学习第二天:深入理解与实战体验
    经过昨天的学习,我对NoSQL数据库有了初步的了解。今天,我进一步深入学习了NoSQL数据库的原理、特点和实际应用,收获颇丰。一、NoSQL数据库原理与技术在深入学习中,我了解到NoSQL数据库的原理主要包括数据模型、存储引擎、索引和查询优化等方面。NoSQL数据库的数据模型灵活多变,可以适应......
  • 根据实体之间的关系设计表数据,学习总结
    一、当实体间的关系是1:1的关系时:学生对学生信息例:学生——学号;学生——姓名;学生——学籍当实体“学生”和其他实体都是1对1的关系,设计表可直接创建单张表即可学生表:学号PK(主键),学生姓名,学籍…… 二、当实体间的关系是1:n的关系时:班级对学生例:班级——班级号,班级——班级......