Vue3 Pinia结构化赋值storeToRefs 解决响应式丢失 保持响应式

Store

javascript 复制代码
//store里的数据
  const userId=ref(6699)
  const userMsg=reactive({
        token:'addadgsadadadada',
        phone:'13111111111',
        age:13
    })
  
    const updateUser=(newUserId)=>{
        userId.value=newUserId
    }

组件

javascript 复制代码
import {useUser} from "@/store/user.js";
//导入store
const  userStore =useUser()
//得到 user 模块返回的对象
console.log(userStore.userId)
//获取用户数据
html 复制代码
  <h1>用户信息{{userStore.userMsg}}</h1>

正常情况下需要这样去获取或者调用完方法,这都需要通过userStore.xxx去获取,有时候想直接通过方法名去使用。

javascript 复制代码
const { userId ,level} =userStore

可以使用结构化赋值,但是这样失去了响应式。

正确写法

使用storeToRefs

javascript 复制代码
<script setup>
import {useUser} from "@/store/user.js";
import {storeToRefs} from "pinia";

const  userStore =useUser()
//得到 user 模块返回的对象

const { userId ,level} =storeToRefs( userStore)
html 复制代码
 <h1>用户ID{{userId}}</h1>

这样就不用去userStore.xxx去获取数据。

storeToRefs只负责数据的相关处理,如是方法就会失效。

使用函数

javascript 复制代码
const { updateUser} = userStore
相关推荐
掘金安东尼2 小时前
让 JavaScript 更容易「善后」的新能力
前端·javascript·面试
掘金安东尼2 小时前
用 HTMX 为 React Data Grid 加速实时更新
前端·javascript·面试
灵感__idea4 小时前
Hello 算法:众里寻她千“百度”
前端·javascript·算法
yinuo4 小时前
轻松接入大语言模型API -04
前端
袋鼠云数栈UED团队5 小时前
基于 Lexical 实现变量输入编辑器
前端·javascript·架构
cipher5 小时前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
UrbanJazzerati5 小时前
非常友好的Vue 3 生命周期详解
前端·面试
AAA阿giao5 小时前
从零构建一个现代登录页:深入解析 Tailwind CSS + Vite + Lucide React 的完整技术栈
前端·css·react.js
亦妤5 小时前
JS执行机制、作用域及作用域链
javascript
兆子龙6 小时前
像 React Hook 一样「自动触发」:用 Git Hook 拦住忘删的测试代码与其它翻车现场
前端·架构