为什么使用vuex?

vuex主要是是做数据交互,父子组件传值可以很容易办到,但是兄弟组件间传值(兄弟组件下又有父子组件),或者大型spa单页面框架项目,页面多并且一层嵌套一层的传值,异常麻烦,用vuex来维护共有的状态或数据会显得得心应手。

需求:两个组件A和B,vuex维护的公共数据是 餐馆的名称 resturantName,默认餐馆名称是 飞歌餐馆,那么现在A和B页面显示的就是飞歌餐馆。如果A修改餐馆名称 为 A餐馆,则B页面显示的将会是  A餐馆,反之B修改同理。这就是vuex维护公共状态或数据的魅力,在一个地方修改了数据,在这个项目的其他页面都会变成这个数据。

vuex进行传值vuex进行传值

 

 ①首先新建一个 sotre文件夹,分开维护 actions mutations getters

vuex进行传值

 

 

②在index.js文件中新建vuex 的store实例

*as的意思是 导入这个文件里面的所有内容,就不用一个个实例来导入了。

vuex进行传值

 

 ③在main.js中导入 store实例

vuex进行传值

 

 

④在组件A中,定义点击事件,点击 修改 餐馆的名称,并把餐馆的名称在事件中用参数进行传递。

...mapactions 和 ...mapgetters都是vuex提供的语法糖,在底层已经封装好了,拿来就能用,简化了很多操作。

其中...mapActions(['clickAFn']) 相当于this.$store.dispatch('clickAFn',{参数}),mapActions中只需要指定方面即可,参数省略。

...mapGetters(['resturantName'])相当于this.$store.getters.resturantName

vuex进行传值

 

 B组件同理

vuex进行传值

 

 ⑤actions中的操作,为了方便理解,ES6的箭头函数换成了比较好理解的函数,commit提交到mutations中

 vuex进行传值

⑥mutations,mutations值所有vuex步骤中唯一能改变数据的操作,在其他步骤修改都是非法的。

在此步骤中,把组件中传递过来的  餐馆名称赋值给了vuex共同维护的状态 resturantName,这时所有的resturantName都变成了餐馆A

vuex进行传值

 

 ⑦在getter中获取最终的状态

vuex进行传值

 

 ⑧在计算属性中,渲染最终的数据 resturantName

vuex进行传值

 

转载自:https://www.jb51.net/article/134853.htm

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-09-01
  • 2022-02-02
  • 2022-12-23
  • 2021-09-23
  • 2021-05-21
  • 2021-12-20
猜你喜欢
  • 2022-12-23
  • 2021-04-10
  • 2022-12-23
  • 2021-05-29
  • 2021-11-15
  • 2021-12-28
相关资源
相似解决方案