首页 > 其他分享 >Pinia

Pinia

时间:2024-02-29 17:12:37浏览次数:13  
标签:return pinia sum useCountStore countStore Pinia import

Pinia

一、搭建pinia环境

1.安装pinia

npm i pinia

2.在main.ts配置pinia

import './assets/main.css'

import { createApp } from 'vue'
import App from './App.vue'
//第一步引入pinia
import {createPinia} from 'pinia';

const app = createApp(App);
//第二步创建pinia ps:最好在App创建之后
const pinia = createPinia();
//第三步安装pinia
app.use(pinia);
app.mount('#app')

3.保存数据

在src文件下创建一个store文件夹放置pinia的数据文件

创建一个count.ts文件保存count文件的数据

import { defineStore } from "pinia";

export const useCountStore = defineStore('count',{
    //真正存储数据的地方
    state(){
        return {
            sum:6
        }
    }
});

4.获取count数据

<template>
  <div class="count">
    <h2>当前求和为 {{ countStore.sum }}</h2>
  </div>
</template>
<script>
import {ref} from 'vue'
import { useCountStore } from '@/store/count'
export default {
  setup(){
    const countStore = useCountStore();
    return{
        countStore
    }
  }
}
</script>

5.获取talk数据

<template>
  <div class="talk">
        <ul>
            <li v-for="(item,index) in talkStore.talkList" :key="item.id">{{item.title}}</li>
        </ul>
  </div>
</template>

<script lang="ts">
import { useTalkStore } from '@/store/talk'
export default {
    setup(){
        const talkStore = useTalkStore();
        return{
            talkStore
        }
    }
}
</script>

6.修改数据

<template>
  <div class="count">
    <h2>当前求和为 {{ countStore.sum }}</h2>
    <select v-model.number="n">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
    </select>
    <button @click="add">加</button>
    <button @click="sub">减</button>
  </div>
</template>

<script>
import {ref} from 'vue'
import { useCountStore } from '@/store/count'
export default {
  setup(){
    const countStore = useCountStore();
    let n = ref(1);
    //直接修改pinia
    let add = function(){
      countStore.sum += n.value;
    }

    let sub = function(){
      countStore.sum -= n.value;
    }
	//第二种修改方式,可批量修改
     /*let sub = function(){
     // countStore.$patch({
       // sum:sum-n.value,
        //a:'sds',
        //b:'sdad'
      })*/ 
    }
    return{
        sum,n,add,sub,countStore
    }
  }
}
</script>

通过actions修改

import { defineStore } from "pinia";
export const useCountStore = defineStore('count',{
    //
    actions:{
        desc(value){
            console.log("@@@@@");
            this.sum-=value
        }
    },
    //真正存储数据的地方
    state(){
        return {
            sum:6
        }
    }
});
<template>
  <div class="count">
    <h2>当前求和为 {{ countStore.sum }}</h2>
    <select v-model.number="n">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
    </select>
    <button @click="add">加</button>
    <button @click="sub">减</button>
  </div>
</template>

<script>
import {ref} from 'vue'
import { useCountStore } from '@/store/count'
export default {
  setup(){
    const countStore = useCountStore();
    let sum = countStore.sum;
    let n = ref(1);
    //直接修改pinia
    let add = function(){
      countStore.sum += n.value;
    }
    //第二种修改方式,可批量修改
    let sub = function(){
      countStore.desc(n.value) 
    }
    return{
        sum,n,add,sub,countStore
    }
  }
}
</script>

getters

import { defineStore } from "pinia";

export const useCountStore = defineStore('count',{
    //
    actions:{
        desc(value){
            console.log("@@@@@");
           this.sum-=value
        }
    },
    //真正存储数据的地方
    state(){
        return {
            sum:6
        }
    },
    getters:{
        bigSum(state){
            return state.sum*100
        },
        update(state){
            return this.sum*100
        }
    }
});
<template>
  <div class="count">
    <h2>当前和为 {{ countStore.bigSum }}</h2>
  </div>
</template>

<script>
import {ref} from 'vue'
import { useCountStore } from '@/store/count'
export default {
  setup(){
    const countStore = useCountStore();
	
    return{
        countStore
    }
  }
}
</script>

标签:return,pinia,sum,useCountStore,countStore,Pinia,import
From: https://www.cnblogs.com/WangJingjun/p/18044801

相关文章

  • Pinia报错需要重新创建
    问题vue3项目,在main.js中已经引入pinia,并且成功创建在单独的js文件中想使用pinia,引入storeimport{useInfo}from'@store/info'但是报错提示getActivePiniawascalledwithnoactivePinia.Didyouforgettoinstallpinia? 解决1.需要额外创建一个store.js文件,用来......
  • Pinia 简单使用
    更新记录更新记录2024年2月28日初始化。Pinia是什么状态管理包,允许跨组件/页面共享状态。Pinia和Vuex对比最大最大的区别,Pinia没有mutations概念,这个东西真的很恶心。从ExtJS转过来,看Pinia不要太爽,和ExtJS的Store的概念简直一模一样。安装包npminstallpinia......
  • 详细vite创建vue3项目(vue3+vue-router+ts+vite+element-plus+pinia)
    详细vite创建vue3项目(vue3+vue-router+ts+vite+element-plus+pinia):https://blog.csdn.net/qq_44423029/article/details/126378199?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170891147716800185818285%2522%252C%2522scm%2522%253A%252220140713.130102334..%2......
  • pinia
    Pinia学习Vue3中使用官网:https://pinia.web3doc.top/introduction.html安装yarnaddpinia#或者使用npmnpminstallpinia使用main.js中引入并注册import{createApp}from'vue'import{createPinia}from'pinia'import'./style.css'impor......
  • 解决pinia中更新值失败的问题
    来看一段代码,思考第19行代码能否正常输出?:asyncfunctionlogin(account_id:string,password:string):Promise<string>{leterror_message='';await$.ajax({url:'',type:"post",data:{//...........
  • 从零搭建Vue3 + Typescript + Pinia + Vite + Tailwind CSS + Element Plus开发脚手架
    项目代码以上传至码云,项目地址:https://gitee.com/breezefaith/vue-ts-scaffold目录前言脚手架技术栈简介vue3TypeScriptPiniaTailwindCSSElementPlusvite详细步骤Node.js安装创建以typescript开发的vue3工程集成Pinia安装pinia修改main.ts创建一个store在组件中使用store集......
  • pinia的使用
    Pinia和Vuex区别大致总结:支持选项式api和组合式api写法pinia没有mutations,只有:state、getters、actionspinia分模块不需要modules(之前vuex分模块需要modules)TypeScript支持很好自动化代码拆分pinia体积更小(性能更好)如何使用Pinia一、安装使用Pinia1.1安装下载//pinia......
  • 使用命令行方式搭建uni-app + Vue3 + Typescript + Pinia + Vite + Tailwind CSS + uv
    使用命令行方式搭建uni-app+Vue3+Typescript+Pinia+Vite+TailwindCSS+uv-ui开发脚手架项目代码以上传至码云,项目地址:gitee.com/breezefaith…目录一、前言近日心血来潮想做一个开源项目,目标是做一款可以适配多端、功能完备的模板工程,包含后台管理系统和前台......
  • 有了Composition API后,有些场景或许你不需要pinia了
    前言日常开发时有些业务场景功能很复杂,如果将所有代码都写在一个vue组件中,那个vue文件的代码量可能就几千行了,维护极其困难。这时我们就需要将其拆分为多个组件,拆完组件后就需要在不同组件间共享数据和业务逻辑。有的小伙伴会选择将数据和业务逻辑都放到pinia中,这样虽然可以解决......
  • 状态管理pinia
    状态管理持久化//网页端APIlocalStorage.setItem()localStorage.getItem()//小程序端的APIwx.setStorageSync()wx.getStorageSync()//兼容多端APIuni.setStorageSync()uni.getStorageSync()  这个步骤完成之后我们就可以实现持久化点击保存按钮就可以看到......