[Vue warn] toRefs() expects a reactive object but received a plain one.

45 阅读1分钟

背景

今天开发 vue 项目时遇到一个警告:

[Vue warn] toRefs() expects a reactive object but received a plain one.

image.png

控制台输出的代码只定位到 main.ts:21,也就是下面内容:

image.png

但这个定位可以说定了个寂寞。

不过好在我有 git 版本管理,知道我新增了哪些内容,于是我慢慢进行控制变量排除法,终于找到具体问题所在。

解决

最终定位到的代码如下图所示:

image.png

我在使用 arco-design 的 a-textarea 组件时,传递给 v-model 的是一个纯文本,而不是一个响应式对象。正如警告信息所说的“它期待一个响应式对象,但却收到了一个原始数据”。

知道问题所在后,解决方案就很多了,可以选择将 condition 拆分成一个一个 ref 对象,或者采用 a-form 组件,直接将 condition 作为 props 传递过去。

参考资料