学习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}`
       }
    },
目录
相关文章
|
人工智能 Python
beets,一个有趣的 Python 音乐信息管理工具!
beets,一个有趣的 Python 音乐信息管理工具!
483 4
|
存储 JSON 监控
FastAPI日志之谜:如何揭开Web应用监控与调试的面纱?
【8月更文挑战第31天】在现代Web开发中,日志记录对于监控应用状态、诊断问题和了解用户行为至关重要。FastAPI框架提供了强大的日志功能,使开发者能轻松集成日志记录。本文将详细介绍如何在FastAPI中设置和利用日志,包括基础配置、请求响应日志、错误处理和结构化日志等内容,帮助提升应用的可维护性和性能。
835 0
|
Web App开发 数据采集 移动开发
开发uniapp过程中对app、微信小程序与h5的webview调试
开发uniapp过程中对app、微信小程序与h5的webview调试
2713 1
|
NoSQL MongoDB 数据库
MongoDB 删除集合
10月更文挑战第14天
498 1
|
前端开发 小程序 JavaScript
2022前端面试笔试题及答案
2022前端面试笔试题及答案
378 0
|
JavaScript 前端开发 应用服务中间件
【超详细!】vue+koa+nginx前后端分离开发项目上线部署到云服务器
1、项目介绍 本项目是vue+koa前后端分离开发的手机商城项目,先贴一下项目的目录,我们主要就是要部署dist和server这两个文件夹
1386 0
【超详细!】vue+koa+nginx前后端分离开发项目上线部署到云服务器
|
JavaScript 网络架构
vue | 动态路由刷新空白
解决在vue3中添加动态路由后,刷新页面空白,并且提示没有正确的路径。
637 0
vue | 动态路由刷新空白
|
JavaScript 网络架构
Vue 动态添加路由及生成菜单
Vue 动态添加路由及生成菜单
491 0
|
JavaScript
JS获取浏览器地址栏的多个参数值的任意值
JS获取浏览器地址栏的多个参数值的任意值
352 3
|
存储 JavaScript 前端开发
前端开发:JS中原型和原型链详解
在前端开发过程中,涉及到JS原理相关的内容也就是常用的几大模块,不仅常用而且很重要,但是涉及到原理的话会有点难懂,尤其是对JS接触不太久的开发者来讲。本篇博文就来分享一下关于JS的原型和原型链相关的知识点,虽然复杂、难懂但是很重要,值得收藏,方便后期查阅使用。
689 2
前端开发:JS中原型和原型链详解