首页 > 其他分享 >pinia

pinia

时间:2024-02-25 11:23:26浏览次数:20  
标签:const counter state pinia import store

Pinia学习

Vue3中 使用

官网:https://pinia.web3doc.top/introduction.html

安装

yarn add pinia
# 或者使用 npm
npm install pinia

使用

main.js中引入并注册

import { createApp } from 'vue'
import { createPinia } from 'pinia'
import './style.css'
import App from './App.vue'

const app = createApp(App)
app.use(createPinia())
app.mount('#app')

src下创建store文件夹-用于管理state

// 命名规范 
// use + 逻辑名 || 业务名 + store
// useCounterStore

1706169098070

Store

创建

import { defineStore } from 'pinia'
// defineStore    
// 参数一是一个id 参数二是配置项  state   getters actions
export const useCounterStore = defineStore('counter', {
  state: () => {
    return {
      count: 0
    }
  },
  getters: {
    doubleCount: () => state.count * 2
  },
  actions: {
    increment () {
      this.count++
    },
    decrement () {
      this.count--
    }
  }
})

Store的 使用

<script setup>
import { useCounterStore } from './store/useCounterStore'
import { storeToRefs } from 'pinia'

// store 是一个用reactive 包裹的对象
// 这意味着不需要在getter 之后写.value,但是,就像setup 中的props 一样,我们不能对其进行解构:
const store = useCounterStore()
// 想结构后保持其响应式 就必须借用 storeToRefs()
const { count } = storeToRefs(store)
console.log('我创建的第一个仓库', store);
console.log('仓库结构', count); // ref包裹的对象
</script>

Store知识点

  1. defineStore 创建仓库

参数1 id 参数2 配置项

返回值 reactive包裹的响应式对象

  1. 引入 ==》 调用 ==》 结构

    import { useCounterStore } from './store/useCounterStore'

    import { storeToRefs } from 'pinia'

    const store = useCounterStore()

    const { count } = storeToRefs(store)

  2. 解构时 直接结构调用后的返回值(store)得到的是不具备响应式的数据

    需要通过storeToRefs () 包裹 store 解构出来的数据才具备响应式 (ref)

State

创建

export const useCounterStore = defineStore("counter", {
  state: () => {
    return {
      num: 0,
      count:0
    };
  }
  })

访问状态

默认情况下,您可以通过 store 实例访问状态来直接读取和写入状态:

<script setup>
import { useCounterStore } from './store/useCounterStore'
import { storeToRefs } from 'pinia'
const store = useCounterStore()
const { count } = storeToRefs(store)
console.log('我创建的第一个仓库', store);
console.log('仓库结构', count); // ref包裹的对象

重置状态

原理

调用的$patch

const $reset = isOptionsStore

​ ? function $reset(this: _StoreWithState<Id, S, G, A>) {

​ const { state } = options as DefineStoreOptions<Id, S, G, A>

​ const newState = state ? state() : {}

​ // we use a patch to group all changes into one single subscription

​ this.$patch(($state) => {

​ assign($state, newState)

​ })

​ }

​ : /* istanbul ignore next */

DEV

​ ? () => {

​ throw new Error(

标签:const,counter,state,pinia,import,store
From: https://www.cnblogs.com/rlwan/p/18032181

相关文章

  • 解决pinia中更新值失败的问题
    来看一段代码,思考第19行代码能否正常输出?:asyncfunctionlogin(account_id:string,password:string):Promise<string>{leterror_message='';await$.ajax({url:'',type:"post",data:{//...........
  • 从零搭建Vue3 + Typescript + Pinia + Vite + Tailwind CSS + Element Plus开发脚手架
    项目代码以上传至码云,项目地址:https://gitee.com/breezefaith/vue-ts-scaffold目录前言脚手架技术栈简介vue3TypeScriptPiniaTailwindCSSElementPlusvite详细步骤Node.js安装创建以typescript开发的vue3工程集成Pinia安装pinia修改main.ts创建一个store在组件中使用store集......
  • pinia的使用
    Pinia和Vuex区别大致总结:支持选项式api和组合式api写法pinia没有mutations,只有:state、getters、actionspinia分模块不需要modules(之前vuex分模块需要modules)TypeScript支持很好自动化代码拆分pinia体积更小(性能更好)如何使用Pinia一、安装使用Pinia1.1安装下载//pinia......
  • 使用命令行方式搭建uni-app + Vue3 + Typescript + Pinia + Vite + Tailwind CSS + uv
    使用命令行方式搭建uni-app+Vue3+Typescript+Pinia+Vite+TailwindCSS+uv-ui开发脚手架项目代码以上传至码云,项目地址:gitee.com/breezefaith…目录一、前言近日心血来潮想做一个开源项目,目标是做一款可以适配多端、功能完备的模板工程,包含后台管理系统和前台......
  • 有了Composition API后,有些场景或许你不需要pinia了
    前言日常开发时有些业务场景功能很复杂,如果将所有代码都写在一个vue组件中,那个vue文件的代码量可能就几千行了,维护极其困难。这时我们就需要将其拆分为多个组件,拆完组件后就需要在不同组件间共享数据和业务逻辑。有的小伙伴会选择将数据和业务逻辑都放到pinia中,这样虽然可以解决......
  • 状态管理pinia
    状态管理持久化//网页端APIlocalStorage.setItem()localStorage.getItem()//小程序端的APIwx.setStorageSync()wx.getStorageSync()//兼容多端APIuni.setStorageSync()uni.getStorageSync()  这个步骤完成之后我们就可以实现持久化点击保存按钮就可以看到......
  • Vue 3 + TypeScript + Vite + Element-Plus + Router + Axios + Pinia项目搭建(内含完
    Vue3+TypeScript+Vite+Element-Plus+Router+Axios+Pinia项目搭建(内含完整架构)安装Vue3+ts+vitenpminitvite@latest选择y,新建项目名称,选择vue,选择vue-ts下载完成后执行以下命令行cd新建的项目名称npminpmrundev安装Element-Plusnpminstallelement-plus-......
  • pinia快速使用
    安装pnpmaddpinia创建一个pinia实例(根store)并将其传递给应用:import{createApp}from'vue'import{createPinia}from'pinia'importAppfrom'./App.vue'constpinia=createPinia()constapp=createApp(App)app.use(pinia)app.mount......
  • vue3学习之Pinia状态管理
    状态管理 src/views/Pinia.vue<scriptsetup>import{ref}from"vue";import{storeToRefs}from"pinia";import{useCounterStore}from"../stores/counter";import{useTodos}from"../stores/todos";//可......
  • Vue3+vite+Pinia+element-plus 换肤+国际化
    先上效果: 一:换肤1:用Pinia小菠萝做状态管理。2:根据自己需求写几套主题色(用于后面在html加载对应的主题颜色) 3:自己写一个切换主题的页面4:每次进入系统前去pinia里面获取上次选中的主题。如果已经设置加载已设置过的在src下随便建个theme/index.ts 然后在main......