• vue3:16、Pinia的基本语法


    目录

    使用数据 

    修改数据


    使用数据 

    选项式APi 

    getters中可以直接使用this,来获取state中的数据,也可以通过参数获取

    counter.ts 

    1. import {defineStore} from 'pinia'
    2. export const useCounterStore = defineStore('counter',{
    3. state:()=>(
    4. {
    5. count:2,
    6. sum:1
    7. }
    8. ),
    9. // state() {
    10. // return{
    11. // count:0,
    12. // sum:2,
    13. // school:"121"
    14. // }
    15. // },
    16. getters:{
    17. bigSum:state=>state.sum*10,
    18. double(state){
    19. return state.count*2
    20. },
    21. double2():number{
    22. return this.count*2
    23. }
    24. }
    25. })

     

    组合式API 

    官方推荐用hooks那种命名方式来给store命名:const useCounterStore =  defineStore()

     

    src/store/counter.js

    1. import { defineStore } from "pinia";
    2. import { computed, ref } from "vue";
    3. export const useCounterStore = defineStore("counter",()=>{
    4. //声明数据 state - count
    5. const count = ref(100)
    6. //声明操作数据的方案 action (普通函数)
    7. function addCount(){
    8. if(count.value<1000){
    9. count.value++
    10. }
    11. }
    12. function subCount(){
    13. count.value--
    14. }
    15. //声明基于数据派生的计算属性 getters
    16. const double = computed(() => count.value*2)
    17. //声明数据 state -msg
    18. const msg = ref('你好 pinia')
    19. return {
    20. count,
    21. double,
    22. addCount,
    23. subCount,
    24. msg
    25. }
    26. })

     根组件

    1. <script setup>
    2. import Son1Com from '@/components/Son1Com.vue';
    3. import Son2Com from '@/components/Son2Com.vue';
    4. import {useCounterStore} from '@/store/counter'
    5. const counterStore = useCounterStore()
    6. //counterStore是reactive对象 count是ref对象
    7. //reactive包裹的ref不需要 .value来取值
    8. //比如
    9. /*
    10. let haha = reactive({
    11. name:"",
    12. age:ref(0)
    13. })
    14. console.log(haha.age)
    15. */
    16. console.log(counterStore.count)
    17. script>
    18. <template>
    19. <h3>
    20. APP.vue根组件
    21. <br>
    22. {{ counterStore.count }}
    23. <br>
    24. {{ counterStore.msg }}
    25. h3>
    26. <Son1Com>Son1Com>
    27. <Son2Com>Son2Com>
    28. template>

     子组件

    1. <script setup>
    2. import { userCounterStore } from '@/store/counter'
    3. const counterStore = useCounterStore()
    4. script>
    5. <template>
    6. <div>Son2 {{ counterStore.count }} - {{ counterStore.double }}div>
    7. <button @click="counterStore.subCount">-button>
    8. template>

    修改数据

    修改数据有三种方式: 

    1. import { userCounterStore } from '@/store/counter'
    2. const counterStore = useCounterStore()
    3. //第一种修改方式:直接修改
    4. counterStore.count = 1
    5. //第二种修改方式:$path,可以单个修改,也可以批量修改
    6. counterStore.$patch({
    7. count:100
    8. })
    9. //第三种修改方式:借助action,可以传参
    10. counterStore.addCount()

    监视变化:订阅——$subscribe

    1. <script setup lang="ts">
    2. import {useLoveTalkStore} from '@/stores/loveTalk'
    3. const talkstore = useLoveTalkStore()
    4. // const {talkList}= storeToRefs(talkstore)
    5. //订阅:监视store中的数据修改
    6. talkstore.$subscribe((mutate,state)=>{
    7. //mutate:本地修改的信息 state:真正的数据
    8. console.log('talkstore里面保存的数据发生了变化',mutate,state)
    9. localStorage.setItem('talkList',JSON.stringify(state.talkList))
    10. })
    11. script>
    12. <template>
    13. <div>div>
    14. template>
    15. <style lang="scss" scoped>style>
    1. import {defineStore} from 'pinia'
    2. export const useLoveTalkStore = defineStore('loveTalk',{
    3. state:()=>(
    4. {
    5. talkList:JSON.parse(localStorage.getItem('talkList') as string) || []//. as string ts的断言
    6. }
    7. ),
    8. actions:{
    9. getTalkList(val:Array){
    10. this.talkList = val
    11. }
    12. }
    13. })
    14. //组合式
    15. /*import {ref} from 'vue'
    16. export const useLoveTalkStore = defineStore('loveTalk',()=>{
    17. const talkList = ref([{}])
    18. function getTalkList(){
    19. talkList.value = []
    20. }
    21. return {
    22. talkList,
    23. getTalkList
    24. }
    25. })*/

  • 相关阅读:
    数据结构与算法_排序算法_插入排序和希尔排序
    vuepress借助jenkins和svn实现文档自动化更新部署
    Qt动态链接库
    Python python-docx 使用教程
    JVM性能调优与实战进阶篇-上
    【数据结构】树与森林
    【C++】简述STL——string类的使用
    全志A40i开发板硬件说明书——100%国产+工业级方案(上)
    RTT 发散思维写点随笔录
    R语言如何写一个爬虫代码模版
  • 原文地址:https://blog.csdn.net/qq_37899792/article/details/132743242