news 2026/2/22 9:28:55

【vue】pinia中的值使用 v-model绑定出现[object Object]

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【vue】pinia中的值使用 v-model绑定出现[object Object]

版本

"dependencies":{"pinia":"^3.0.4","vue":"^3.5.26"},"devDependencies":{"@vitejs/plugin-vue":"^6.0.3","vite":"^7.3.1","vite-plugin-vue-devtools":"^8.0.5"},"engines":{"node":"^20.19.0 || >=22.12.0"}

代码

user.js

import{defineStore}from'pinia';exportconstuseUserStore=defineStore('userStore',{actions:{changeUsername(value){if(value&&value.length<10){this.username+=value}}},getters:{getUsername(){returnthis.username.toUpperCase()}},state:()=>({username:'abc'}),})

App.vue

<script setup>import{useUserStore}from'@/store/user'import{storeToRefs}from'pinia';import{ref,toRef,toRefs}from'vue';constuser=useUserStore()// 错误constuserInfo=storeToRefs(user)console.log(userInfo.username)// 正确const{username}=storeToRefs(user)console.log(username)</script><template><!--错误--><div>{{userInfo.username}}</div><input type="text"v-model="userInfo.username"><!--正确--><div>{{username}}</div><input type="text"v-model="username"></template>

现象


分析

原因

👉问题不是出在storeToRefs,而是出在你“把一个 ref 对象当成普通值来用”的心智模型上
[object Object]说明input 绑定到的不是字符串,而是一个对象


关键点:storeToRefs返回的是什么?

constuserInfo=storeToRefs(user)

此时:

userInfo={username:Ref<string>}

也就是说:

  • userInfo.username是一个 ref 对象
  • userInfo.username.value→ 才是真正的字符串"abc"

那为什么模板里会出现[object Object]

表面看很迷惑,因为你写的是:

<input v-model="userInfo.username">

v-model只能直接绑定:

  • 普通变量
  • 或单个ref

❌ 它不擅长绑定「对象里的 ref」

在这种情况下,Vue 会把整个Ref当成值塞进 input,于是:

String(Ref) → [object Object]

为什么很多教程让你这样写?

const{username}=storeToRefs(user)

因为这样:

username===Ref<string>

这是一个干净的 ref,非常适合v-model


✅ 正确、推荐写法(重点)

App.vue

<script setup> import { useUserStore } from '@/store/user' import { storeToRefs } from 'pinia' const user = useUserStore() const { username } = storeToRefs(user) </script> <template> <div>{{ username }}</div> <input type="text" v-model="username" /> </template>

这和你原来的代码真正的区别

你的写法推荐写法
userInfo.usernameusername
对象里的 ref单独的 ref
v-model易出坑v-model官方推荐

为什么{{ userInfo.username }}有时“看起来能用”?

因为:

  • 插值表达式会自动解包 ref
  • v-model在对象嵌套 ref 的场景下不会稳定解包

所以你会看到一个很典型的新手陷阱:

显示正常,但 input 变成[object Object]


总结一句好记的

storeToRefs之后,一定要解构再用v-model
v-model="obj.xxx"
const { xxx } = storeToRefs(store)

如果你愿意,我可以顺手帮你把

  • getter
  • action
  • v-model + 业务校验
    整理成一个标准 Pinia 表单写法模板👌
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/16 10:11:03

【Js】箭头函数注意事项

如下代码等价 //代码1 state: () > ({username: abc}),//代码2 state: () > {return {username: abc}},

作者头像 李华
网站建设 2026/2/21 6:46:44

用实力说话顶流之选的AI论文工具 —— 千笔·专业学术智能体

你是否曾为论文选题发愁&#xff0c;反复修改却总不满意&#xff1f;是否在文献检索中迷失方向&#xff0c;格式调整让人头疼&#xff1f;面对查重率和AI率的双重压力&#xff0c;你是否感到力不从心&#xff1f;这些论文写作中的常见难题&#xff0c;正在困扰着无数专科生。而…

作者头像 李华
网站建设 2026/2/22 7:47:09

2026别错过!专科生必备的降AIGC软件 —— 千笔·降AIGC助手

在AI技术深度渗透学术写作的当下&#xff0c;越来越多的学生、研究人员和职场人士开始依赖AI工具提升写作效率。然而&#xff0c;随之而来的AI率超标问题却成为困扰学术成果的重要障碍——随着查重系统不断升级&#xff0c;对AI生成内容的识别愈发精准&#xff0c;论文一旦AI痕…

作者头像 李华
网站建设 2026/2/18 5:04:49

一文讲透|8个降AI率工具测评:自考降AI率必备神器推荐

在自考论文写作过程中&#xff0c;越来越多的考生开始关注“AI生成痕迹”对论文质量的影响。随着AI技术的普及&#xff0c;许多学生在撰写论文时会借助AI工具进行辅助&#xff0c;但这也带来了AIGC率过高的问题&#xff0c;容易被查重系统识别为非原创内容。如何在保持原意不变…

作者头像 李华
网站建设 2026/2/21 6:09:23

413 Request Entity Too Large 原因与解决方案

核心原因 HTTP 413 错误表示客户端发送的请求体&#xff08;如文件、表单数据、API请求&#xff09;超过了服务器允许的最大限制&#xff0c;常见场景包括&#xff1a; 文件上传&#xff08;图片/视频/压缩包&#xff09;大型表单或JSON数据提交API请求数据量过大 触发源头&…

作者头像 李华
网站建设 2026/2/22 0:36:14

深度测评 10个降AI率平台:本科生必看的降AI率工具全对比

在当前高校学术论文写作中&#xff0c;AI生成内容的普及让“降AIGC率”成为本科生不得不面对的重要课题。随着各大高校对AI痕迹检测的日益严格&#xff0c;如何在保持原文语义和逻辑的前提下&#xff0c;有效降低AI生成内容的识别率&#xff0c;成为了许多学生关注的焦点。而AI…

作者头像 李华