V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  coli  ›  全部回复第 1 页 / 共 1 页
回复总数  1
举个简单的例子吧:

```javascript
const a = reactive({ b: 1 });
// some logics ...
a = { b: 123 };
```

结果会报错,因为你在尝试把 `const` 定义的值赋值为另外一个值。

而 `<Comp v-model="styleConfig" />` 的语法糖等效为:

```vue
<Comp :modelValue="styleConfig" @update-modelValue="(newVal) => styleConfig = newVal" />
```

这边 `styleConfig = newVal` ,看出问题了吧?

---

而用 `ref` 没问题是因为,ref 用了一层 `.value` 包裹起来,这样你把原来整个对象覆盖掉,改到的都是 `.value` ,而不是 `styleConfig` 这个对象本身。

不过看原来的代码,把 `v-model="styleConfig.fontSize"` 传出去就好了,这么绕除非你想要用到 `styleConfig` 的其他属性……

---

PS:Vue3 可以用 `defineModel` 写,用起来很爽。

---

PPS: 这也是个 JS 对象地址的问题:

```javascript
const a = [ { x: 1 }, { y: 2 }, { z: 3 } ];
const b = a[0];
a[0].x = 2;
console.log(b); // => { x: 2 }
a[0] = { x: 3 };
console.log(b, a[0] === b); // => { x: 2 } , false
```
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4961 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 10ms · UTC 09:36 · PVG 17:36 · LAX 02:36 · JFK 05:36
Developed with CodeLauncher
♥ Do have faith in what you're doing.