首页 > 其他分享 >vue3 pinia

vue3 pinia

时间:2024-05-15 20:00:19浏览次数:18  
标签:usebookStore state book pinia vue3 import data

pinia

  • 状态管理器,统一状态管理,组件间通信
  • state、getter 和 action,我们可以假设这些概念相当于组件中的 data、 computed 和 methods

1 安装

npm install pinia

2 在store/xx.js,写入代码,可以定义多个

import {defineStore} from "pinia";

export const useCountStore=defineStore('counter',{
    // 定义变量
    state:()=>{
        return{count:0}
    },
    // 这里面写方法,与后端交互或逻辑判断,再操作数据
    actions:{
        addcounnter(){
            this.count++
        }
    }
})
    // getter-->获取数据
    getters: {
        getCount(){
            return this.count
        },
    },

3 main.js中使用插件

import {createPinia} from "pinia";

let pinia=createPinia()

createApp(App).use(pinia).mount('#app')

4 在组件中使用pinia的数据

<template>
    <h1>ddddd</h1>
    <h2>{{counter.count}}</h2>
</template>

<script setup>
    import {useCountStore} from "../store/counter";
    let counter = useCountStore()
</script>

5 getters用法

  • 按价格过滤
  • 无参
import {defineStore} from "pinia";

export const usebookStore = defineStore("book", {
    state: () => {
        return {
            data: [],
        };
    },
    getters: {
        suds: (state) => state.data.filter((book) => book.price > 200)
    }
});
<template>
    <div v-for="i in book.suds">
        <p>{{i.name}}----{{i.price}}---{{i.publish}}		</p>
    </div>
</template>

<script setup>
    import {usebookStore} from "../store/bookdata";
    import axios from "axios";
    let book = usebookStore()
    async function fetchData() {
        try {
            const response = await axios.get("http://127.0.0.1:8000/app01/");
            book.data = response.data;
        } catch (error) {
            console.log(error);
        }
    }
    fetchData()
</script>
  • 有参

  • 在 Vue 的 Store 中,getter 本身是没有传参的。Getter 是根据 Store 的状态属性进行计算的,它们是无参数的计算属性。

    然而,你可以通过 getter 返回一个函数,来实现传递参数的效果。这样,你可以在组件中使用该 getter 函数,并传递参数给它。

import {defineStore} from "pinia";

export const usebookStore = defineStore("book", {
    state: () => {
        return {
            data: [],
        };
    },
    getters: {
        sudss: (state)=> (num) => state.data.filter((book) => book.price > num)

    }
});
<template>
    <div v-for="i in book.sudss(num)">
       <p>{{i.name}}----{{i.price}}---{{i.publish}}</p>
    </div>
    <input type="text" v-model="num">
</template>

<script setup>
    import {usebookStore} from "../store/bookdata";
    import axios from "axios";
    import {ref} from 'vue'
    let book = usebookStore()
    let num=ref(0)
    async function fetchData() {
        try {
            const response = await axios.get("http://127.0.0.1:8000/app01/");
            book.data = response.data;
        } catch (error) {
            console.log(error);
        }
    }
    fetchData()
</script>

标签:usebookStore,state,book,pinia,vue3,import,data
From: https://www.cnblogs.com/unrealqcc/p/18194584

相关文章

  • vue3的入门--setup
    代码量:200行以上博客量:1时间:2h vue2中的data和methods可以与setup并列写,但是:data和methods可以利用this调用setup中的数据而,setup中,不能调用data和methods中的数据<!--Person.vue--><template><divclass="person"><h2>姓名:{{name}}</h2>&......
  • Vue3 vue-grid-layout布局添加右键事件
    示例code<template><divclass="dashboard-container"><ulclass='contextmenu'v-show="menuConfig.visible":style="{left:menuConfig.left+'px',top:menuConfig.top+'px'}">......
  • vue3 前端大屏项目适配方法
    1scale()方法//屏幕内的内容//样式部分.contain{width:100vw;height:200vh;background:url(.pic);backgrouns-size:cover}.screen{display:inline-block;width:1920px;//设计稿的宽度height:1080px;//设计稿的高度transform-origin:l......
  • 【vue3入门】-【22】 动态组件&组件保持存活&异步组件
    动态组件有些场景下会需要在两个组件之间来回切换,比如tab页面App.vue<template><!--组件标签--><component:is="tabComponent"></component><button@click="changeHandle">切换组件</button></template><script>importC......
  • Vue3 列表渲染以及key值的状态管理 的学习
    列表渲染使用v-for指令来进行一个数组的渲染,基于iteminitems其中item是迭代名,items是源数据的数组且迭代名称也可以自由定义,只需要与后面插值表达式的一致即可v-for也可以支持第二个参数进行位置的索引(item,index)initems还有一个小的注意点in也可以换成of一样的用......
  • vue3 多服务器域名跨域代理和请求配置
    多服务器域名的跨域配置:同样是在vue.config.js文件中对devServer.proxy进行配置,如下:const{defineConfig}=require('@vue/cli-service')module.exports=defineConfig({transpileDependencies:true,lintOnSave:false,//关闭eslint检查,devServer:{......
  • vue3+ts+elementPlus项目搭建
    1.cmd+R  查看是否安装node环境和vue,node-v  出现版本号如果没有,去下载安装,地址: Node.js—DownloadNode.js®(nodejs.org)vue-V   出现版本号如果没有, 输入命令行,全局安装或升级脚手架npminstall-g@vue/cli2.创建vue项目  (项目名......
  • VUE3.0 中如何使用SVG图标
    1.文件下新建SvgIcon文件夹以及子文件index.js,index.vue,svg文件夹(用于存放svg图片) 2.编写index.vue组件<template><svg:class="svgClass"aria-hidden="true"><use:xlink:href="iconName"/></svg></template><......
  • vue3编译优化之“静态提升”
    前言在上一篇vue3早已具备抛弃虚拟DOM的能力了文章中讲了对于动态节点,vue做的优化是将这些动态节点收集起来,然后当响应式变量修改后进行靶向更新。那么vue对静态节点有没有做什么优化呢?答案是:当然有,对于静态节点会进行“静态提升”。这篇文章我们来看看vue是如何进行静态提升的......
  • 今天学了vue3的composition API
    代码量:60左右时间:1h搏客量:1<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><linkrel="icon"href="/favicon.ico"><metaname="viewport"content="wi......