为什么Vue中当前组件获取到其他组件的data都是不能直接修改的,而是要间接调用那个组件的方法来修改?
想请问一下各位前端大佬,我觉得直接修改更方便呀,这样设计是为了什么,可以不这样设计吗?
如果你严格按照这个规则来设计程序
那么有朝一日你想看一下有哪些地方修改了某个组件的某个属性 只要debug一下那个方法就可以了
不过vue的手段不止于此
你也可以在watch中监听属性达到debug的目的
相比之下还是函数的debug更加清晰
你是说props不允许修改这个事吗?
因为一个变数可以传递给多个子组件,如果你悄悄的修改它,导致其他子组件的props也跟著变了,这对于调试是个麻烦事。并不是说Vue做不到,而是Vue要遵守一些范式。
想修改props,只在子组件内改是允许改的,前提是你要先克隆一份。
写起来表面上是更方便,然后某天有个bug,和A组件中的一个状态有关,然后有其他100个组件会在A组件外直接修改这个状态,你就慢慢排查去吧
为了追踪数据历史状态,这样可以提供更好的debug和更好的维护性。
其实vue种的设计很多都符合这种思想,比如vuex中的mutaition。
数据的修改应该更容易被追踪和观察。这点vuetool就体现出来了。
你朋友知道你有一百万放在你的银行卡里,他有办法不经过你就把这一百万取出来吗?
可以直接修改的, 不过你按照规范的话 可以从vue devtool 受益。
我个人也认为比较麻烦,我习惯把js部分封装成类,然后把类的实例挂载到data,然后 直接xxx.xxx 或者 xxx.x()去调用。子组件要用就把实例传递下去。
这都不需要学习设计模式,你可以从外部修改类私有成员吗?道理是一样的。
自由不加限制,带来的一定是强者对弱者的剥削。
这样不会乱
不理解你的问题,可以直接修改的
主要是为了可维护性。你如果代码不会和其他人协作,也不用维护,没啥问题。
推荐阅读: