vue 是不是在理论上,任何情况下都不需要操作 dom?
source link: https://www.v2ex.com/t/844832
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
但某些情况下似乎的确得操作 dom ,比如点击时一个 dom 时需要操作另外一个 dom 时(后来发现可以在 data 里面写个对象,然后让另外一个 dom 监视它做出反应,而 on 方法里直接改这个对象就行),但我很清楚,因为我比较熟悉传统写法,而新学 vue ,总会有 vue 写法暂时无法解决但直接操作 dom 能解决的事情,一方面想引经据典,尽量不操作 dom ,一方面一个现成方案摆在眼前不用真的有些眼馋。
有时候总在想,是不是 vue 有更好的方法解决,我这样写是不是成了异端,vue 真的是能不用就不用 dom 吗?那些情况下大家都是会选择操作 dom 的?
Biwood 1 天前 via iPhone 1
当然,有些情况下还是需要直接访问 DOM 的,我能想到的有:
1. 所有对 Vue 实例挂载节点之外的 DOM 操作,比如 window/document/body 这些
2. 需要获取某些 DOM 原生属性的时候,比如 offsetHeight 之类的
placeholder 1 天前 2
然后随着学习 vue 的深入,慢慢的改成 vue 提供的方式或者方法。
不用太过纠结。
mostkia 1 天前
mostkia 1 天前
Kawa 1 天前 via Android 1
Vue 绝大部分情况下不需要操作 DOM, 但是一旦需要操作就是痛苦面具, 特别是用了 ts+setup 的情况, 写起来是真的蛤人.
IvanLi127 1 天前 via Android 1
Cbdy 1 天前 via Android 1
sadfQED2 1 天前 via Android 1
des 1 天前 via iPhone 1
类比一下,你可以想象一个提线木偶。然后木偶的动作( html 显示什么)都是通过线( bind )由你(数据)来控制的
至于和 dom 直接互动建议用 ref
另外你说的眼馋不会指的是 jQuery 吧?
Desiree 1 天前 2
jorneyr 1 天前 1
statumer 23 小时 55 分钟前 1
mostkia 23 小时 50 分钟前
mostkia 23 小时 48 分钟前
mostkia 23 小时 43 分钟前
mostkia 23 小时 40 分钟前
GeruzoniAnsasu 21 小时 35 分钟前 3
比方说你想拿到「某个标签的内容」,按我的自然思路是,这个内容应该也是某组数据渲染出来的,那我直接用数据不就好了,如果不存在,那是这个组件有问题,我得改这个组件让它能提供一个暴露数据的接口
如果是想「修改另一个节点的状态」,那也应该是节点 /组件各司其职,提供一个 emit 来让别人通知节点自己变更状态。这个思路跟桌面 GUI 是一样的,qt 那的 signal/slots 跟 vue 的 emits 基本上是同一种东西
-------
可能也是写过桌面 GUI 的原因,我是很忌惮直接去改变非自控 dom 的状态的,因为在桌面 GUI 程序里这样写是大忌——很容易搞不清自己当前在哪个线程里。跨线程去操作 ui 组件容易引发访问违例、死锁、竞争等各种各样奇怪的问题,所以传统桌面 GUI 的程序一律在使用各种事件去通知组件重绘自己的内容。这跟传统 js 出来的「宏状态」一把梭,一个位置掌控全页面 dom 的思路就很不一样。我倒是「天生更适应现代的前端框架」
nomagick 20 小时 52 分钟前 1
这个时候你就果断根据自己的判断行动就可以了。
当它能够帮你的时候就酌情用用,帮不了你也别把它奉若圭臬。
doommm 17 小时 51 分钟前 via Android 1
直接操作 dom 当然是被允许的,某些情况下是必须这么做的,但前提是遵守 vue 的一些规定,否则就会出问题。建议去看看 vue 的文档的相关部分
mostkia 13 小时 35 分钟前
mostkia 13 小时 32 分钟前
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK