学习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}`
       }
    },
目录
相关文章
|
JavaScript 前端开发
JavaScript 获取地址栏指定参数(整理)
JavaScript 获取地址栏指定参数(整理)
|
JavaScript 前端开发 应用服务中间件
【超详细!】vue+koa+nginx前后端分离开发项目上线部署到云服务器
1、项目介绍 本项目是vue+koa前后端分离开发的手机商城项目,先贴一下项目的目录,我们主要就是要部署dist和server这两个文件夹
1328 0
【超详细!】vue+koa+nginx前后端分离开发项目上线部署到云服务器
|
NoSQL MongoDB 数据库
MongoDB 删除集合
10月更文挑战第14天
419 1
|
前端开发 JavaScript
原生实现环形进度条
原生实现环形进度条
518 121
|
存储 JSON 监控
FastAPI日志之谜:如何揭开Web应用监控与调试的面纱?
【8月更文挑战第31天】在现代Web开发中,日志记录对于监控应用状态、诊断问题和了解用户行为至关重要。FastAPI框架提供了强大的日志功能,使开发者能轻松集成日志记录。本文将详细介绍如何在FastAPI中设置和利用日志,包括基础配置、请求响应日志、错误处理和结构化日志等内容,帮助提升应用的可维护性和性能。
695 0
|
人工智能 Python
beets,一个有趣的 Python 音乐信息管理工具!
beets,一个有趣的 Python 音乐信息管理工具!
404 4
|
Web App开发 数据采集 移动开发
开发uniapp过程中对app、微信小程序与h5的webview调试
开发uniapp过程中对app、微信小程序与h5的webview调试
2289 1
|
缓存 JavaScript API
「Vue3系列」Vue3 计算属性(computed)、监听属性(watch)
在 Vue 3 中,计算属性(Computed Properties)是一种强大的功能,它允许你声明一个依赖于其他响应式数据属性的属性,并且这个属性的值会根据其依赖的数据的变化而自动更新。计算属性是基于它们的依赖关系进行缓存的,只有在它的相关依赖发生改变时才会重新求值。
1891 0
|
JavaScript
JS获取浏览器地址栏的多个参数值的任意值
JS获取浏览器地址栏的多个参数值的任意值
322 3

热门文章

最新文章