复习Vue 组件间通信.md

2020-10-09  本文已影响0人  _小海绵

1. props/$emit

  1. 父组件向子组件传值:父组件通过props向下传递数据给子组件
  2. 子组件向父组件传值(通过自定义事件形式):子组件通过events给父组件发送消息,实际上就是子组件把自己的数据发送到父组件。

2. 中央事件总线(事件中心)

这种方法通过一个空的Vue实例作为中央事件总线(事件中心),用它来触发事件和监听事件,巧妙而轻量地实现了任何组件间的通信,包括父子、兄弟、跨级。当我们的项目比较大时,可以选择更好的状态管理解决方案vuex。

具体实现方法:

var Event=new Vue();
Event.$emit(事件名,数据);
Event.$on(事件名,data => {});

3. vuex

Vuex实现了一个单向数据流,在全局拥有一个State存放数据,当组件要更改State中的数据时,必须通过Mutation进行,Mutation同时提供了订阅者模式供外部插件调用获取State数据的更新。而当所有异步操作(常见于调用后端接口异步获取更新数据)或批量的同步操作需要走Action,但Action也是无法直接修改State的,还是需要通过Mutation来修改State的数据。最后,根据State的变化,渲染到视图上。

各模块在流程中的功能
Vuex与localStorage

vuex 是 vue 的状态管理器,存储的数据是响应式的。但是并不会保存起来,刷新之后就回到了初始状态,具体做法应该在vuex里数据改变的时候把数据拷贝一份保存到localStorage里面,刷新之后,如果localStorage里有保存的数据,取出来再替换store里的state。(由于vuex里,我们保存的状态,都是数组,而localStorage只支持字符串,所以需要用JSON转换)

4. attrs 与 listeners(应有$)

多级组件嵌套需要传递数据时,通常使用的方法是通过vuex。但如果仅仅是传递数据,而不做中间处理,使用 vuex 处理,未免有点大材小用。为此Vue2.4 版本提供了另一种方法:$attrs/$listeners

$attrs$listeners是两个对象,$attrs 里存放的是父组件中绑定的非 Props 属性,$listeners里存放的是父组件中绑定的非原生事件。

5. provide/inject

祖先组件中通过provider来提供变量,然后在子孙组件中通过inject来注入变量。

主要解决了跨级组件间的通信问题,不过它的使用场景,主要是子组件获取上级组件的状态,跨级组件间建立了一种主动提供与依赖注入的关系。

祖先组件中通过provider来提供变量,然后在子孙组件中通过inject来注入变量。

provide 和 inject 主要为高阶插件/组件库提供用例。

6. parent / $children与 ref

本文不适于Vue3.0,内容参考了vue组件间通信六种方式

上一篇下一篇

猜你喜欢

热点阅读