props
可以将数据从父组件传递给子组件,子组件也可以继续把数据传递给它的子组件,但这会导致组件彼此关联,每个组件也会包含重复的代码。
考虑如下的组件树:
如果要将正在播放和已收藏的歌曲信息在多个组件之间共享,将会需要在一层层组件间传递许多数据。
Vue 提供了 Provide/Inject 功能,用于向组件树内的其他节点共享数据:
provide
组件的 provide
选项用于向组件树内的其他节点共享数据:
inject
组件的 inject
选项用于注入某个根节点共享的数据:
组件并不会知道注入的数据由哪个节点共享,只是不断向上层组件查找,直到找到共享的数据为止。
如果未找到共享的数据,会收到类似的警告:
[Vue warn]: injection “musicList” not found.
响应式的数据共享
由于 Provide/Inject 模式传递的数据并不是响应式的,所以在上面的例子中,双击列表播放其他曲目时,音乐列表中的“playing”状态并不会更新。
我们会在 [组合式 API] 部分学习响应式的数据共享。