为什么不建议使用引用地址达到双向绑定的目的

  • 7

在父组中直接给子组件传递对象,子组件再将对象赋与data中,这样由于是引用地址,子组件中数据改变时,父组件中的原数据也会改变,感觉挺方便的,无需emit回调,但大家都说不建议这样使用,这是为什么

回复
阅读 1.2k
6 个回答

不要文档说什么就信什么,嵌套严重的情况下直接修改props最快,有啥不好维护的?写一坨父子通信的代码那才是不好维护

组件是通过发布接口来通知使用者该如何使用该组件的。一般接口就是 props 输入和 event 输出,但是要约定其他形式的接口也未尝不可。比如可以约定一个对象引用,通过修改该对象的属性来实现数据交互。这个约定本身并没有问题,问题在于信息的同步上 —— 这个约定必须通过文档等明确的形式来说明,因为从使用上根本看不出来该组件会修改传入的对象属性。编辑器等工具也不会给出这样的提示,所以这个约定信息在程序的角度是“隐含”的,并不确定。这个不确定的信息在一个人,或者少数几个人,短期记忆中是可用的。但是我们的程序显然不应该只考虑短期存在。长期来看,如果你忘了,或者换了批人……这个信息可能就会“消失”,也许有人会去查文档,也许有人只是靠猜,也许会被当成一个 BUG …… “隐含”的信息丢失掉了,这才是危险的事情!

耦合度高,而且会带来一些不可预测的bug,而这些往往很难排查出来

既然是建议,就可以不接受。
只要自己控制得好,核裂变也能发电。
但是思考一下人类控制核裂变的过程,我觉得建议可能还是得听。

子组件中数据改变时,父组件中的原数据也会改变
  • 据我了解,父组件向子组件传递的对象,不是双向绑定的;文档链接如下:
  • prop 是单向数据流的 v2 , prop 是单向数据流的 v3
  • 我常用两种方式在父子组件间传递数据
  • 1、父组件通过 props 向子组件传递数据,子组件可以通过 emit 向父组件传递数据;
  • 2、或者使用 vuex 传递
1want
  • -1
新手上路,请多包涵

vue3的hooks就是这种方案,多个组件需要共用同个数据时就可以这样解决,其实也就是引用的同个对象

  1. 好处是减少组件之间通信
  2. 这种解决方案也类似vuex,但比vuex更方便,简单
宣传栏