首页 > 解决方案 > 将数据从子组件传递到父组件真的有必要发出吗?

问题描述

我发现可以通过 props 和 bind 将对象传递给组件,并且子组件可以在对象上设置键,然后父组件可以使用该键。

因此,将数据传递回父组件似乎并不严格要求“发射”。

我错过了什么吗?

标签: vue.jsvue-component

解决方案


是的,您可以将对象作为道具传递并对其进行变异,但是,它被 Vue 视为反模式, 因为“由于新的渲染机制,每当父组件重新渲染时,子组件的本地更改将被覆盖

一般来说你不应该那样做。这可能/可能会导致代码中出现意外错误。一般来说,你应该复制你的对象,修改它,然后向上发射到父级(正如你在上一段中提到的,我相信)。这是我采取的方法,也是自上而下、自上而下的普遍共识。

来源:https ://forum.vuejs.org/t/is-mutating-object-props-bad-practice/17448/2

在那次讨论中还提到它“在简单的组件中没有任何真正的迫在眉睫的风险。 ”。我个人认为在某些合适的情况下直接从 child 改变你的道具是可以的。

但是最好通过从子组件发出事件来改变父组件的数据。

您还可以使用同步修饰符使双向绑定更容易。


与您的问题并不真正相关,但这也是将数据存储在 Vuex 还是本地状态(至少对我而言)的决定因素之一。当我有一个共享给组件子级的数据时,向组件发出和注册事件侦听器会使我的代码有点混乱。所以我使用 Vuex 来存储数据并对其进行变异。

这是我从这里找到的关于是否将数据存储在 Vuex 中的一个很好的决策流程图。Vuex决策流程图


推荐阅读