Vue超简单的全局状态管理 - Pinia的最佳实践

1. 安装

yarn add pinia
# or with npm
npm install pinia
// vue3中

import { createPinia } from 'pinia'
app.use(createPinia())

2.store

2.1 创建文件

image-20220530120629006

import { defineStore } from 'pinia'

export const useCounterStore = defineStore({
  id: 'count',
  state: () => ({
    count: 0
  }),
  getters: {
    doubleCount: (state) => state.count * 2
  },
  actions: {
    increment() {
      this.count++
    }
  }
})

2.2 使用

// 在需要用到的地方直接引入

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

const store = useCounterStore()

store.xxx 可以调用所有state,getters,actions

store.state
store.doubleCount
store.increment

3. 修改State中的值

主要可通过以下5种方式进行修改

import { useCounterStore } from '@/stores/count'
import { storeToRefs } from 'pinia'

const store = useCounterStore()
const { count } = storeToRefs(store)

function handleClick() {
  count.value = count.value + 2   // 修改的是组件中count的值,该修改会同步到store中的count
}

// 1. 直接通过store.xxx修改
function handleClick1() {
  store.count++
}

// 2. $patch 传入对象的方式
function handleClick2() {
  store.$patch({
    count: store.count + 1,
  })
}

// 3. $patch 传入函数的方式 (推荐使用)
function handleClick3() {
  store.$patch((state) => {
    state.count += 1
  })
}

// 4. 直接替换掉$state (推荐使用方式, 重置默认值)
function handleClick4() {
  store.$state = {
    count: 0,
  }
    
   // 恢复成默认值也可以通过 store.$reset()
}

// 5. 通过actions中的函数进行修改 (推荐使用, 多个组件中可以重复使用)
function handleClick5() {
  store.increment()    // store的actions中编写函数
}

// 函数
// actions: {
//   increment() {
//     this.count++
//   }
// }

4. store.$xxx

4.1 store.$reset()

功能:恢复成初始值

4.2 store.$state

功能:访问或者修改值

4.3 store.$patch

功能:修改值

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

const store = useCounterStore()

// 1. 传入函数
store.$patch((state) => {
    state.count += 1
})

// 2. 传入对象
store.$patch({
    count: store.count + 1,
})

5. getters的使用

5.1 基础使用

export const useCounterStore = defineStore({
  id: 'count',
  state: () => ({
     ... 
  }),
  getters: {
    doubleCount: (state) => state.count * 2
  },
})

// in foo.vue

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

const store = useCounterStore()

store.doubleCount   // 直接使用

5.2 传参使用

getters: {
	// 通过使用高阶函数(函数里面返回函数)
	mulitpleNum(state) => {
		return (num) => state.count * num
	}
},

// 调用时,直接传参即可

store.multipleNum(100)

6. actions的使用

actions: {
    increment() {
      this.count++
    },
    change(a: any, ...args: any[]) {
      // 通过this可以获取到Pinia实例,那么就能访问到它所有的方法和属性
      console.log('this.$state', this.$state)
      console.log('this.doubleCount', this.doubleCount)
      console.log('this.increment', this.increment)

      console.log('a', a)   // a 1
      console.log('args', args) // args (2) [2, 3]
    }
}


// 直接调用, 可以传任意个参数
function handleClickChange() {
  store.change(1, 2, 3)
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: Vue3是Vue.js的最新版本,它带来了许多新的特性和改进,例如更快的渲染速度和更好的TypeScript支持。 Vite是一个新的构建工具,它可以快速地构建现代化的Web应用程序。它使用ES模块作为构建系统的基础,可以实现快速的热重载和快速的开发体验。 TypeScript是一种静态类型语言,它可以帮助开发者在编写代码时发现潜在的错误,并提供更好的代码提示和自动补全功能。 Vue Router是Vue.js的官方路由管理器,它可以帮助开发者构建单页应用程序。它提供了许多有用的功能,例如路由参数、路由导航守卫和动态路由。 Pinia是一个新的状态管理库,它可以帮助开发者管理Vue.js应用程序中的状态。它提供了一种简单的方式来定义和使用状态,并且可以与Vue.js的生命周期钩子和Vue Router集成。 ### 回答2: Vue3是基于Vue2的改进版本,它在性能和开发体验方面有很大的提升。其中最重要的特点是它的虚拟DOM模型改进了响应式数据的渲染,使得性能得到了提高。同时,Vue3还引入了Composition API,这是一个函数式的API,将逻辑分离开来,使得代码更加简洁易懂。 Vite是一款基于ESM构建工具,并使用原生ES模块作为开发时的静态编译器,它不需要像Webpack那样将所有的文件都打包在一起,因此在开发时可以更加快速地编译和构建项目。同时,Vite还支持热重载,这使得开发和调试过程更加高效。 TypeScript是一种静态类型的语言,它可以在开发时提供更好的代码提示和类型检查,帮助开发者在编写代码时避免常见的错误。由于Vue3是使用TypeScript编写的,因此它对TypeScript提供了更好的支持。 Vue Router是Vue官方提供的路由管理器,它可以帮助开发者对单页应用进行路由管理Vue3对Vue Router进行了改进,现在它可以使用Composition API来编写路由逻辑,并且支持动态路由。 Pinia则是Vue官方推出的状态管理库,与Vuex不同,它使用了新的API,并且更加轻量级。Pinia也允许使用Composition API进行编写,这样可以在处理状态管理方面更加灵活和高效。 综上所述,Vue3、Vite、TypeScriptVue Router和Pinia都是当前最流行、最优秀的前端开发工具和库,它们的使用可以让开发者更加高效、简洁地进行开发。同时,它们都是基于Vue生态的,因此可以很好地与Vue进行整合,从而使得Vue在前端开发领域中的地位更加稳固、重要。 ### 回答3: Vue3是一个用于构建用户界面的渐进式框架,它具有更快、更轻量级、更易学习等特点。Vite是一个基于浏览器原生ES模块热更新启动的构建工具,它能够快速而且高效地打包项目,并且拥有快速的热重载和源码分割。 在Vue3中使用TypeScript可以提供更好的类型推导和编辑器支持,使开发更加高效、可靠。Vue-Router是Vue3的路由管理器,它能够方便地处理路由并且支持动态路由、嵌套路由、路由拦截等功能。而Pinia是一个状态管理库,可以更好地管理Vue3应用程序中的状态,它使用类似于Vuex的API,提供了状态管理和响应式数据持久化方案。 使用Vite集成Vue3和TypeScript可以让我们快速构建Vue3项目并且享受到TypeScript的类型检查和Vue3的新特性,同时还能使用热重载和源码分割。在应用程序中使用Vue-Router和Pinia可以更好地管理路由和状态,提升应用的性能和可维护性。 总之,Vue3、Vite、TypeScriptVue-Router和Pinia这五种技术可以很好的组合在一起,为我们带来高效、可靠、灵活的开发体验,助力我们更好地构建出高质量的Vue3应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏2同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值