vue.js - 将数据从子组件传递到父组件真的有必要发出吗?
问题描述
我发现可以通过 props 和 bind 将对象传递给组件,并且子组件可以在对象上设置键,然后父组件可以使用该键。
因此,将数据传递回父组件似乎并不严格要求“发射”。
我错过了什么吗?
解决方案
是的,您可以将对象作为道具传递并对其进行变异,但是,它被 Vue 视为反模式, 因为“由于新的渲染机制,每当父组件重新渲染时,子组件的本地更改将被覆盖”
一般来说你不应该那样做。这可能/可能会导致代码中出现意外错误。一般来说,你应该复制你的对象,修改它,然后向上发射到父级(正如你在上一段中提到的,我相信)。这是我采取的方法,也是自上而下、自上而下的普遍共识。
来源:https ://forum.vuejs.org/t/is-mutating-object-props-bad-practice/17448/2
在那次讨论中还提到它“在简单的组件中没有任何真正的迫在眉睫的风险。 ”。我个人认为在某些合适的情况下直接从 child 改变你的道具是可以的。
但是最好通过从子组件发出事件来改变父组件的数据。
您还可以使用同步修饰符使双向绑定更容易。
与您的问题并不真正相关,但这也是将数据存储在 Vuex 还是本地状态(至少对我而言)的决定因素之一。当我有一个共享给组件子级的数据时,向组件发出和注册事件侦听器会使我的代码有点混乱。所以我使用 Vuex 来存储数据并对其进行变异。
这是我从这里找到的关于是否将数据存储在 Vuex 中的一个很好的决策流程图。
推荐阅读
- python-3.x - 按键排序字典
- elasticsearch - 使用 Elasticsearch 进行分面导航的最佳方式是什么?
- python - Django:访问自定义用户模型(根据 Django 文档创建)以使用新模板(signup.html)创建新用户
- ansible - Ansible 初学者手册
- ruby - Jruby 解析错误 REXML::ParseException: #
- android - 如何在 Android 上过时时刷新可见数据?
- flutter - 为什么容器在侧面同时从顶部和底部调整大小,以及同时向左和向右调整?
- angular - 无法加载资源:net::ERR_CONNECTION_RESET - Angular
- batch-file - 将带有纪元时间的 xml 文件名转换为 Filename-MMDDYYYY.xml
- pip - pip 在 github 上找不到版本