诚城的成长 诚城的成长
首页
  • 高数基础
  • 数一

    • 高等数学
    • 线性代数
    • 概率论与数理统计
  • 820

    • 数据结构
    • 计算机操作系统
  • 英一

    • 单词
    • 语法
    • 阅读理解
    • 作文
  • 政治

    • 马克思主义基本原理
    • 毛泽东
    • 近代史
    • 思修
    • 时事
  • openpose
  • html5
  • css3
  • UI

    • Tailwind Css
    • Element-Plus
    • UniApp
  • 框架

    • Vue3
  • 拓展包

    • 包管理工具
    • 包开发
  • 开发语言

    • C语言
    • PHP
    • Phyton
  • 框架

    • Laravel
  • 会计

    • 初级经济法基础
    • 初级会计实务
  • 软考

    • 信息系统项目管理师
  • 博客

    • vitepress
    • vuepress
  • manim
  • git
  • vsCode
  • latex
  • docker
  • axios
  • vim
  • mac
  • Jetbrains

    • phpstorm
    • clion
突发奇想
GitHub (opens new window)

诚城

我有N个梦想……
首页
  • 高数基础
  • 数一

    • 高等数学
    • 线性代数
    • 概率论与数理统计
  • 820

    • 数据结构
    • 计算机操作系统
  • 英一

    • 单词
    • 语法
    • 阅读理解
    • 作文
  • 政治

    • 马克思主义基本原理
    • 毛泽东
    • 近代史
    • 思修
    • 时事
  • openpose
  • html5
  • css3
  • UI

    • Tailwind Css
    • Element-Plus
    • UniApp
  • 框架

    • Vue3
  • 拓展包

    • 包管理工具
    • 包开发
  • 开发语言

    • C语言
    • PHP
    • Phyton
  • 框架

    • Laravel
  • 会计

    • 初级经济法基础
    • 初级会计实务
  • 软考

    • 信息系统项目管理师
  • 博客

    • vitepress
    • vuepress
  • manim
  • git
  • vsCode
  • latex
  • docker
  • axios
  • vim
  • mac
  • Jetbrains

    • phpstorm
    • clion
突发奇想
GitHub (opens new window)
  • start
  • pinia

    • pinia
    • state
      • define
      • use
      • 修改 state
        • 直接修改
        • patch
        • $state
        • 通过 action 修改
      • pinia 数据响应式
    • action
    • getter
    • other
    • 持久化存储
  • router
  • setup
  • solt
  • computed
  • component.md

  • map
  • vue3
  • pinia
诚城
2022-04-15
目录

state原创

# define

// ts or js 
import { defineStore } from 'pinia'
import pages from '../pages.json'
// 命名规范 最好使用 use
export const useMainStore = defineStore('main', {
  state: () => {
    return {
      // 定义 state 的内容
      homePath: '/home'
    }
  },
  getters: {},
  actions: {
  }
})

# use

// 记得先在 main.ts 中导入 pinia
<script lang="ts">
import { mainStore } from '@/stores/MainStore'
import { mapState } from 'pinia'

export default {
  name: 'TwTabbar',
  data() {
    return {
      cur: ''
    }
  },
  computed: {
    ...mapState(mainStore, {
      tabBar: 'tabBar',
      curIndex: 'tabBarIndex'
    })
  },
  methods: {
    
  }
}
</script>

# 修改 state

# 直接修改

在 setup 中直接修改。

# patch

可以修改指定的值,不用修改整个对象。

<script setup lang='ts'>
  import { Xxxx } from './store'

  Xxx.$patch({
    aaa: 111,
    bbb: 'sdsa'
  })

  Xxx.$patch((state) => {
    state.aaa = 222,
    state.bbb = 'cccc'
  })
</script>

# $state

必须修改整个对象,不能单独修改某一个值

<script setup lang='ts'>
  import { Xxxx } from './store'

  Xxx.$state({
    // 必须对 state 对象里面的元素进行赋值 !!!
    aaa: 111,
    bbb: 'sdsa'
  })

</script>

# 通过 action 修改

在 pinia 文件中定义 action 。可以传参。

注意 'storeToRefs' 的使用,不然无法实现 pinia 响应式数据。

// Xxxx.ts
import { defineStore } from 'pinia'
export const useXxxxStore = defineStore('xxxx', {
  state: () => {
    return {
      aaa: '/pages/documents/home',
      bbb: 50
    }
  },
  getters: {},
  actions: {
    changeA(str:String) {
      this.aaa = str
    },
    changeB(num:Number) {
      this.bbb = num
    }
  }
})

// Xxxx.vue
<template>
  <view class="content">
    <view>原始调用: {{ Xxxx.aaa }} {{ Xxxx.bbb }}</view>
    <view>本组件 setup pinia 调用: {{ aaa }} {{ bbb }}</view>
    <button @click="changeA">改变a</button>
    <button @click="changeB">改变b</button>
  </view>
</template>

<script setup lang="ts">
import { storeToRefs } from 'pinia'
import { useXxxxStore } from '@/stores/Xxxx'
const Xxxx = useXxxxStore()
const { aaa, bbb } = storeToRefs(useXxxxStore())

const changeA = () => {
  Xxxx.$patch({
    aaa: '123123123123'
  })
}

const changeB = () => {
  // Xxxx.bbb++
  // Xxxx.$patch((state) => {
  //   state.bbb++
  // })
  Xxxx.changeB(900)
}

</script>

# pinia 数据响应式

pinia 结构不具有响应式,直接使用 pinia 对象发生更新时,无法直接实时渲染,因此需要使用 storeToRefs 。

#vuex
上次更新: 2022/08/23, 18:12:45
pinia
action

← pinia action→

Theme by Vdoing | Copyright © 2022-2022 carveybunt | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×
×

特别申明:

本站所有内容均为个人理解或转载,如有不当之处,敬请大佬指导!