coli 最近的时间轴更新
coli

coli

V2EX 第 497240 号会员,加入于 2020-07-02 00:06:00 +08:00
今日活跃度排名 8295
coli 最近回复了
举个简单的例子吧:

```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   ·   实用小工具   ·   1422 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 13ms · UTC 16:35 · PVG 00:35 · LAX 09:35 · JFK 12:35
Developed with CodeLauncher
♥ Do have faith in what you're doing.