学习Pinia 第五章(Actions,getters)

简介: 主要作用类似于computed 数据修饰并且有缓存

Actions(支持同步异步)


1.同步 直接调用即可


import { defineStore } from 'pinia'
import { Names } from './store-naspace'
export const useTestStore = defineStore(Names.TEST, {
    state: () => ({
        counter: 0,
    }),
    actions: {
        increment() {
            this.counter++
        },
        randomizeCounter() {
            this.counter = Math.round(100 * Math.random())
        },
    },
})


<template>
     <div>
         <button @click="Add">+</button>
          <div>
             {{Test.counter}}
          </div>    
     </div>
</template>
<script setup lang='ts'>
import {useTestStore} from './store'
const Test = useTestStore()
const Add = () => {
     Test.randomizeCounter()
}
</script>
<style>
</style>


2.异步 可以结合async await 修饰


import { defineStore } from 'pinia'
import { Names } from './store-naspace'
type Result = {
    name: string
    isChu: boolean
}
const Login = (): Promise<Result> => {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve({
                name: '小满',
                isChu: true
            })
        }, 3000)
    })
}
export const useTestStore = defineStore(Names.TEST, {
    state: () => ({
        user: <Result>{},
        name: "123"
    }),
    actions: {
        async getLoginInfo() {
            const result = await Login()
            this.user = result;
        }
    },
})


template


<template>
     <div>
         <button @click="Add">test</button>
          <div>
             {{Test.user}}
          </div>    
     </div>
</template>
<script setup lang='ts'>
import {useTestStore} from './store'
const Test = useTestStore()
const Add = () => {
     Test.getLoginInfo()
}
</script>
<style>
</style>


3.多个action互相调用getLoginInfo  setName


    state: () => ({
        user: <Result>{},
        name: "default"
    }),
    actions: {
        async getLoginInfo() {
            const result = await Login()
            this.user = result;
            this.setName(result.name)
        },
        setName (name:string) {
            this.name = name;
        }
    },


getters


1.使用箭头函数不能使用this this指向已经改变指向undefined 修改值请用state


主要作用类似于computed 数据修饰并且有缓存


    getters:{
       newPrice:(state)=>  `$${state.user.price}`
    },


2.普通函数形式可以使用this


    getters:{
       newCurrent ():number {
           return ++this.current
       }
    },


3.getters 互相调用


    getters:{
       newCurrent ():number | string {
           return ++this.current + this.newName
       },
       newName ():string {
           return `$-${this.name}`
       }
    },
目录
相关文章
|
6月前
|
JavaScript 开发者
Vue状态管理: 在Vuex中,什么是mutation?它们应该如何使用?
Vue状态管理: 在Vuex中,什么是mutation?它们应该如何使用?
178 4
|
6月前
|
前端开发 数据处理 开发者
vuex中mutations详解,与actions的区别
Vuex 的 Mutations 是用于改变 Vuex Store 中状态的一种方式。它是一个同步的操作,用于直接修改 Store 中的状态。
|
3月前
|
存储 JavaScript API
Vuex的魔法宝典:掌握State, Getters, Mutations和Actions,让状态管理不再是难题
【8月更文挑战第27天】Vuex是Vue.js应用程序的状态管理工具,通过集中式存储管理组件状态并确保状态按照预定义的规则发生变化。
126 0
|
1月前
|
监控 JavaScript
Vuex学习二:Vuex的重点属性学习,state、mutations、getters、actions、module。
这篇文章是关于Vuex状态管理库的深入学习,涵盖了其核心概念如state、getters、mutations、actions和modules,并通过实例代码展示了它们的使用和重要性。
26 1
|
4月前
|
监控 JavaScript
VUEX 使用学习三 : mutations
VUEX 使用学习三 : mutations
27 0
|
6月前
|
JavaScript
如何在Vuex中定义和使用getters和actions
在Vuex中,`getters`用于派生状态值,类似Vue的计算属性,例如从`todos`状态中过滤已完成/未完成任务。`actions`则处理异步操作,如模拟加载数据,通过`commit`改变状态。
|
6月前
|
JavaScript 前端开发 测试技术
vuex中Actions详解
- Actions 是 Vuex 中的一个重要概念,用于处理异步操作和触发mutations。 - Actions 可以包含任意的 JavaScript 逻辑,包括异步操作(如发送 AJAX 请求)。 - Actions 通过调用 store.dispatch 方法来触发mutations。
|
6月前
|
缓存 JavaScript
聊一聊Vue中的computed和watch区别
聊一聊Vue中的computed和watch区别
|
11月前
【Vue2.0学习】—watch和computed对比(三十七)
【Vue2.0学习】—watch和computed对比(三十七)
Vue2向Vue3过度Vuex核心概念actions
Vue2向Vue3过度Vuex核心概念actions
59 0