定制软件开发Vue3中使用pinia

目录


1、安装:npm install

2、创建store定制软件开发文件并配置内部的index.js文件

  1. import { defineStore } from 'pinia' //引入pinia
  2. //定制软件开发这里官网是单独导出 定制软件开发是可以写成默认导出的 定制软件开发官方的解释为大家一起定制软件开发约定仓库用use打头的单词 固定统一小仓库的名字不易混乱
  3. export const useCar=defineStore("test",{
  4. state: () =>{
  5. return ({
  6. msg:"这是pinia的数据",
  7. name:"小狮子",
  8. age:18
  9. }) //为了避免出错,返回的值用()包起来
  10. }
  11. })

3、main.js文件中配置

  1. import { createApp } from 'vue'
  2. import App from './App.vue'
  3. const app=createApp(App)
  4. import { createPinia } from 'pinia' //引入pinia
  5. app.use(createPinia())
  6. app.mount('#app')

4、组件使用

  1. <template>
  2. <h1>aaa--{{store.msg}}----{{store.name}}--{{store.age}}</h1>
  3. <button @click="change1">修改store.name</button>
  4. <router-view></router-view>
  5. </template>
  6. <script setup>
  7. import {useCar} from "../store/index.js" //将之前配置的pinia文件夹中的index.js文件引入
  8. let store=useCar() //接收
  9. console.log(store)
  10. let change1=()=>{
  11. store.name="小羊" //修改pinia里面的数据
  12. console.log(store.name)
  13. }
  14. </script>
  15. <style scoped>
  16. h1{
  17. width: 400px;
  18. height:200px;
  19. background-color:deeppink;
  20. }
  21. </style>

效果图

 点击按钮,界面变化

 说明成功修改了pinia里面的数据,且界面刷新证明这种直接修该pinia数据的方式依然是数据。

但如果在接收pinia数据时,进行解构则不再是响应式数据,需要使用toRefs

4-1、 store.$reset()  

将状态 重置 到其初始值

当我们接收到pinia数据且对其数据进行了大量修改又想还原时,调用此方法就可以将接收的pinia数据全部重置还原

注意:store.$reset() 中的store是自己设定的接收变量,重点是 .$reset()  

  1. <template>
  2. <h1>aaa--{{store.msg}}----{{store.name}}--{{store.age}}</h1>
  3. <button @click="change1">修改store.name</button>
  4. <button @click="reset">reset</button>
  5. <router-view></router-view>
  6. </template>
  7. <script setup>
  8. import {useCar} from "../store/car.js"
  9. let store=useCar()
  10. console.log(store)
  11. let change1=()=>{
  12. store.name="小羊"
  13. console.log(store.name)
  14. }
  15. let reset=()=>{ //初始化pinia数据
  16. store.$reset()
  17. }
  18. </script>
  19. <style scoped>
  20. h1{
  21. width: 400px;
  22. height:200px;
  23. background-color:deeppink;
  24. }
  25. </style>

在之前的案例中修改了pinia的name属性值

 此时我们点击reset按钮,则会重置pinia的所有数据

 

 4-2 store.$patch

群体修改,可以将pinia的数据进行同一修改

特点:批量修改但状态只刷新一次

  1. <template>
  2. <h1>aaa--{{store.msg}}----{{store.name}}--{{store.age}}</h1>
  3. <button @click="change1">修改store.name</button>
  4. <button @click="reset">reset</button>
  5. <button @click="fn">fn</button>
  6. <router-view></router-view>
  7. </template>
  8. <script setup>
  9. import {useCar} from "../store/car.js"
  10. let store=useCar()
  11. console.log(store)
  12. let change1=()=>{
  13. store.name="小羊"
  14. console.log(store.name)
  15. }
  16. let reset=()=>{ //重置
  17. store.$reset()
  18. }
  19. function fn(){
  20. //批量修改
  21. store.$patch({
  22. name:"小羊",
  23. age:20,
  24. })
  25. }
  26. </script>
  27. <style scoped>
  28. h1{
  29. width: 400px;
  30. height:200px;
  31. background-color:deeppink;
  32. }
  33. </style>

 

 点击fn按钮后

说明批量修改成功

 5.订阅修改

  1. //可以通过 store 的 $subscribe() 方法查看状态及其变化,通过patch修改状态时就会触发一次
  2. store.$subscribe((mutation, state) => {
  3. // 每当它发生变化时,将整个状态持久化到本地存储
  4. localStorage.setItem('test', JSON.stringify(state))
  5. })

6.Getter

Getter 完全等同于 Store 状态的 。 它们可以用 defineStore() 中的 getters 属性定义。 他们接收“状态”作为第一个参数以鼓励箭头函数的使用:(ps:虽然鼓励但是依然提供了非es6玩家的使用方式 内部可以用this代表state)

  1. //store/index.js文件
  2. export const useStore = defineStore('main', {
  3. state: () => ({
  4. counter: 0,
  5. }),
  6. getters: {
  7. doubleCount: (state) => state.counter * 2,
  8. },
  9. })
  10. //组件中直接使用: <p>Double count is {{ store.doubleCount }}</p>

7、Actions

在pinia中没有提供mutaion 因为Actions就够了(它可以异步同步的统一修改状态)

之所以提供这个功能 就是为了项目中的公共修改状态的业务统一

  1. export const useStore = defineStore('main', {
  2. state: () => ({
  3. counter: 0,
  4. }),
  5. actions: {
  6. increment() {
  7. this.counter++//1.有this
  8. },
  9. randomizeCounter(state) {//2.有参数 想用哪个用哪个
  10. state.counter = Math.round(100 * Math.random())
  11. },
  12. randomizeCounter(state) {
  13. //异步函数
  14. axios("/test").then(res=>{
  15. state.counter = res.data.length
  16. })
  17. }
  18. },
  19. })
  20. //组件中的使用:
  21. setup() {
  22. const store = useStore()
  23. store.increment()
  24. store.randomizeCounter()
  25. }

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发