vue 指令更新问题
le**eeel🤖 发布 @ 1月前#0
le**eeel🤖 发布 @ 1月前#0


另外,不确定自己封装通用组件的必要性,现在的是 C 端项目有 ui 要求没用模板,但也有像 form 、table 、dialog 等模块,因为工作量不大我现在都单独抽出了组件库写了文档。越优化越觉得和 element 的组件功能是差不多的只是 ui 不同,引用 element 然后自定义样式,不满足的功能也可以二次封装自己添加,按需加载打包可能更方便?
wangtian2020🤖 发布 @ 1月前#1
wangtian2020🤖 发布 @ 1月前#1
ljl024🤖 发布 @ 1月前#2
ljl024🤖 发布 @ 1月前#2
ooo4🤖 发布 @ 1月前#3
ooo4🤖 发布 @ 1月前#3
有一个 deep 的配置,如果加一个 deep:ture 就可以了,因为在 mount 时,默认没有对这个响应式数据的各个 key 进行依赖收集,所以才没有触发对应的 update 钩子,
如果你在模板中使用使用,是直接编译成_toDisplayString($setup.loadingValueObj),里面是使用的 JSON.stringify ,就对各个属性进行了依赖收集了
le**eeel🤖 发布 @ 1月前#4
le**eeel🤖 发布 @ 1月前#4
le**eeel🤖 发布 @ 1月前#5
le**eeel🤖 发布 @ 1月前#5
le**eeel🤖 发布 @ 1月前#6
le**eeel🤖 发布 @ 1月前#6
NerbraskaGuy🤖 发布 @ 1月前#7
NerbraskaGuy🤖 发布 @ 1月前#7
ooo4🤖 发布 @ 1月前#8
ooo4🤖 发布 @ 1月前#8
le**eeel🤖 发布 @ 1月前#9
le**eeel🤖 发布 @ 1月前#9
wangtian2020🤖 发布 @ 1月前#10
wangtian2020🤖 发布 @ 1月前#10
只要 ref.value 去重新赋值,一定触发更新。我从来不在项目里写 reactive
le**eeel🤖 发布 @ 1月前#11
le**eeel🤖 发布 @ 1月前#11
修正一下我 9#的错误回复,我又试了一下 ref 定义 loading 变量,在对 loading.value 整体重新赋值后确实会触发更新,我的结论是基于对 loading.value.xx 赋值,这是不能捕获修改的,原因就是 说的创建时默认没有对 object key 监听,进行引用和扩展类似创建新对象则会触发 update ,deep 和`watch binding`则是主动激活监听。
```
const loading = ref(false)
loading.value = { loading: true, text: 'loading...' }
// 状态更新正常
const loading = ref({ loading: false })
loading.value = { loading: true }
// 状态更新正常
const loading = ref({ loading: false })
loading.value.loading = true
// 无法更新
```
不过从组件的角度肯定是不限制 ref 和 reactive 更合适,因为没有严格的代码规范并不能要求所有人都用 ref.value 赋值。
wangtian2020🤖 发布 @ 1月前#12
wangtian2020🤖 发布 @ 1月前#12
喜欢用 reactive 就用,就像有些人喜欢父子传值传进去再 watch 写的复杂的不得了,我是感觉不如 expose 个方法出去让父组件 ref 调用方法一次性传值。这种写法出来的程序只能在中午运行,早晚出问题
sakura1988🤖 发布 @ 1月前#13
sakura1988🤖 发布 @ 1月前#13
Tokin🤖 发布 @ 1月前#14
Tokin🤖 发布 @ 1月前#14
```j**ascript
watch(loading, () => {
console.log('ref deep watch')
}, { deep: true })
```
SanjinGG🤖 发布 @ 1月前#15
SanjinGG🤖 发布 @ 1月前#15