【问题标题】:Why is two way binding between a parent component and a child component bad?为什么父组件和子组件之间的双向绑定不好?
【发布时间】:2016-09-28 10:31:57
【问题描述】:

我主要在 AngularJS 中进行开发,最近我正在研究 Vue.js 并阅读它的指南,在一页上它提到:

默认情况下,所有的 props 在子属性和父属性之间形成一个单向向下的绑定:当父属性更新时,它会向下流向子属性,反之则不会。此默认值旨在防止子组件意外改变父组件的状态,这会使您的应用程序的数据流更难推理。

这是来自https://vuejs.org/guide/components.html#Prop-Binding-Types

我想知道何时使用双向绑定,何时不使用有什么原则吗?

对于子组件需要管理数组变量的情况,看来双向绑定还是有意义的。

例如,假设我想制作自己的 Vue.js 或 AngularJS 版本的http://selectize.github.io/selectize.js/

如果使用双向绑定,我只需将父组件的数组传递给我的 Vue.js 或 AngularJS 选择组件,并让选择组件管理它。

如果不使用双向绑定,似乎替代方案是:

一个。当添加/删除项目时,父组件要么必须手动更新数组

b.或者父组件会有一个手动设置数组的函数,然后将该函数传递给子组件

c。子组件调度父组件监听的事件,并更新其数组

我认为这些是替代方案?两者似乎都比较冗长,似乎并没有提供太多好处。

这是一个例子,但我认为很多组件都会有这个问题,另一个例子是如果我有一个产品选择器组件,只需将数组变量传入这个组件,然后让组件管理数组以反映所选产品。

我对此的主要问题是:

  1. 我对替代双向绑定的想法是否正确?

  2. 对于上述情况,使用单向绑定是否有优势? (我认为替代方案在避免“意外改变父母的状态”方面没有多大优势)

  3. 如果 (1) 和 (2) 是正确的,那么单向向下绑定提供明显优势以避免“意外改变父级状态”的示例是什么?

【问题讨论】:

    标签: javascript angularjs vue.js


    【解决方案1】:

    “单向绑定”只是一个原则,类似于OO的封装,降低代码复杂度。

    在我看来作者并不是不想使用“双向绑定”(实际上 vuejs 支持),只是说你不要滥用它。

    在您的示例中,产品选择器类似于原生输入,当然我认为您可以使用两种方式绑定,就像 v-model 一样。

    【讨论】:

      猜你喜欢
      • 2017-11-03
      • 2016-10-15
      • 1970-01-01
      • 2018-02-13
      • 2021-01-08
      • 1970-01-01
      • 2016-11-19
      • 2020-06-28
      • 2020-04-10
      相关资源
      最近更新 更多