Javascript 为什么对Vue';s提供和注入功能?
我正在考虑在项目中使用Vue的新提供/注入功能,但在正式的Vue中,它给出了以下警告: 提供和注入主要用于高级插件/组件库用例。不建议在通用应用程序代码中使用它们 然而,文件没有给出原因。在“通用应用程序代码”而不是“高级插件/组件库用例”中使用提供和注入有什么危险 在示例代码中:Javascript 为什么对Vue';s提供和注入功能?,javascript,vue.js,vuejs2,Javascript,Vue.js,Vuejs2,我正在考虑在项目中使用Vue的新提供/注入功能,但在正式的Vue中,它给出了以下警告: 提供和注入主要用于高级插件/组件库用例。不建议在通用应用程序代码中使用它们 然而,文件没有给出原因。在“通用应用程序代码”而不是“高级插件/组件库用例”中使用提供和注入有什么危险 在示例代码中: // parent component providing 'foo' var Provider = { provide: { foo: 'bar' }, // ... } // child c
// parent component providing 'foo'
var Provider = {
provide: {
foo: 'bar'
},
// ...
}
// child component injecting 'foo'
var Child = {
inject: ['foo'],
created () {
console.log(this.foo) // => "bar"
}
// ...
}
据我所知,这样做的好处是,如果您有多个嵌套子组件,您可以跳过向每个嵌套子组件传递道具,而直接在孙子组件中“接收”注入的值
如果您绕过默认的非反应行为“如果您传递一个观察到的对象”,您甚至可以使注入的值成为反应性的,但这里有一个警告对我来说是有意义的,因为您有一个跨嵌套组件的反应性变量,而数据不应该以这种方式传递,因此,如果使用被动对象,跟踪更改可能会变得更加混乱。根据样式指南:
对于父子组件通信,应该首选道具和事件,而不是。$parent或变种道具
一个理想的Vue应用程序是道具关闭,事件启动。然而,在一些边缘情况下,prop突变或this.$parent可以简化已经深度耦合的两个组件
问题是,在许多简单的情况下,这些模式可能会提供方便。注意:不要为了短期的便利(写更少的代码)而被引诱到交易的简单性(能够理解你所在州的流程)
在这种特殊情况下,您基本上是使用inject
改变道具。您需要注意的是,在标准应用程序中使用provide
/inject
并没有遵循规范方法。如果要将状态映射到组件层次结构,则首选此选项。根据样式指南:
对于父子组件通信,应该首选道具和事件,而不是。$parent或变种道具
一个理想的Vue应用程序是道具关闭,事件启动。然而,在一些边缘情况下,prop突变或this.$parent可以简化已经深度耦合的两个组件
问题是,在许多简单的情况下,这些模式可能会提供方便。注意:不要为了短期的便利(写更少的代码)而被引诱到交易的简单性(能够理解你所在州的流程)
在这种特殊情况下,您基本上是使用
inject
改变道具。您需要注意的是,在标准应用程序中使用provide
/inject
并没有遵循规范方法。如果要将状态映射到组件层次结构,则首选此选项。谢谢。在这种情况下,Vuex的一个问题是,如果在同一页面上有多个父组件,则从父组件的子组件触发事件会被两个父组件拾取。谢谢。在这种情况下,Vuex的一个问题是,如果在同一页上有多个父组件,则从父组件的子组件触发事件会被两个父组件拾取。