Blog
首页
文档
收藏
关于
  • 在线转换时间戳 (opens new window)
  • 在线压缩图片 (opens new window)
  • Float-Double转二进制 (opens new window)
  • 文件转Hex字符串 (opens new window)

HiuZing

🍑
首页
文档
收藏
关于
  • 在线转换时间戳 (opens new window)
  • 在线压缩图片 (opens new window)
  • Float-Double转二进制 (opens new window)
  • 文件转Hex字符串 (opens new window)
  • 前端面试题

  • JavaScript

  • Vue2

  • port

  • CSS

  • Node.js

  • JavaScript优化

  • uniapp

  • Mini Program

  • TypeScript

  • 面向对象编程

  • UI组件

  • Plugin

  • Vue3

  • 性能优化

  • Axios

  • 状态管理

    • pinia

      • Pinia 初始
      • Pinia state
      • Pinia 解构store
        • 直接解构
          • 实例
          • 解决方案
          • 源码
      • Pinia Actions
      • Pinia Getters
      • Pinia API
    • zustand

  • React

  • Mock

  • Icon

  • Template

  • 构建工具

  • 项目规范配置

  • Taro

  • SVG

  • React Native

  • 前端
  • 状态管理
  • pinia
HiuZing
2023-03-25
目录

Pinia 解构store

# 直接解构

不具有响应性

const Test = useTestStore()
 
 
const { current, name } = Test
 
console.log(current, name);
1
2
3
4
5
6

# 实例

修改Test.current 解构完之后的数据不会变

而源数据是会变的

<template>
  <div>origin value {{Test.current}}</div> <!--增值-->
  <div>
    pinia:{{ current }}
    <button @click="change">change</button>
  </div>
</template>

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

const Test = useTestStore()

const change = () => {
  Test.current++
}

const { current } = Test

console.log(current);// 1
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 解决方案

使用 storeToRefs

import { storeToRefs } from 'pinia'
 
const Test = useTestStore()
 
const { current } = storeToRefs(Test)
1
2
3
4
5

其原理跟toRefs 一样

# 源码

通过toRaw使store变回原始数据防止重复代理

循环store通过isRef isReactive 判断;如果是响应式对象直接拷贝一份给refs对象,将其原始对象包裹toRef 使其变为响应式对象

上次更新: 2024/08/14, 04:14:33
Pinia state
Pinia Actions

← Pinia state Pinia Actions→

最近更新
01
React Native 使用SVG
08-13
02
Docker基础命令
08-04
03
算数逻辑单元
07-30
更多文章>
Theme by Vdoing | Copyright © 2021-2024 WeiXiaojing | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式