当前位置: 首页 > news >正文

【译】Vue 的小奇技(第八篇):两个鲜有人知的 Vuex 技巧

  • 原文地址:Two less known facts about Vuex
  • 原文作者:Alex Jover
  • 译者:程序猿何大叔

特别声明:本文是作者 Alex Jover 发布在 VueDose 上的一个系列。

版权归作者所有。

译者在翻译前已经和作者沟通得到了翻译整个系列的授权。

为了不影响大家阅读,获得授权的记录会放在本文的最后。

正文

这篇文章来自于一位很特别的受邀者:Nicolò Mezzopera,他是 Pulilab 网站的开发者,一位真大神。我们去年还一起组织过一场在布达佩斯的关于 Vue.js 的 线下交流会!

如果你今年 4 月 12 号刚好就在维罗纳,他刚好会在 Vue Day Italy 2019 会上发表演讲,这是你偶遇他的好机会哦 ?。

介绍完了作者,我们来进入主题。

当在我们 Vue.js 的组件中使用了 Vuex,除了映射功能的函数之外,我们好像忘记了它所暴露出来的其他有用的 API。

我们一起来看看可以利用它来干些什么。首先,还是先来创建一个基本的 store:

const store = new Vuex.Store({
  state: {
    count: 0
  },
  getters: {
    getCountPlusOne: state => state.count + 1
  },
  mutations: {
    increment(state) {
      state.count++;
    }
  }
});
复制代码

Watch 方法

watch 是将 Vuex 与其他外部代码整合的最有用的方法,可以在你的 awesomeService 或者是在 catchAllAuthUtils 等等类似的服务中使用。

使用示例:

const unsubscribe = store.watch(
  (state, getters) => {
    return [state.count, getters.getCountPlusOne];
  },
  watched => {
    console.log("Count is:", watched[0]);
    console.log("Count plus one is:", watched[1]);
  },
  {}
);

// To unsubscribe:
unsubscribe();
复制代码

我们所做的就是在调用 vuex 的实例方法 watch 时,传入两个函数作为实参,第一个函数实参返回我们想要在 state 与/或 getters 上监听的属性;第二个函数实参是当属性值 state.countgetters.getCountPlusOne 有改变时,调用的回调函数。

这是用来结合 Vuex 与 react 或者 angular 甚至是 JQuery 代码时,非常有用的技巧。

可以在这个 CodeSandbox 上查看例子。

SubscribeAction 方法

有时候,与其监听 store 中的一个属性改变,不如使用 subscribeAction 方法订阅一个特定的 action,比如像 loginlogout 之类的异步请求,这也是更有用的方案。

调用监听函数,在每一个 action 分发的时候调用指定的回调函数,并在其中调用自定义代码。

我们在每一个 action 的分发前以及完成后,来分别开始和停止全局的 spinner。

const unsubscribe = store.subscribeAction({
  before: (action, state) => {
    startBigLoadingSpinner();
  },
  after: (action, state) => {
    stoptBigLoadingSpinner();
  }
});

// To unsubscribe:
unsubscribe();
复制代码

讲完啦!

你可以在线阅读这篇 原文,里面有可供复制粘贴的源代码。如果你喜欢这个系列的话,请分享给你的同事们!

结语

此系列的其他文章,会同步系列官网的发布情况,及时地翻译发布到掘金。请持续关注「程序猿何大叔」,相信我会给大家带来更多优质的内容,不要忘了点赞~

如果想要了解译者的更多,请查阅如下:

  • 个人博客:blog.hadesz.com
  • 个人 github 仓库:github.com/hadeshe93
  • 个人微信公众号:搜索「程序猿何大叔」

请求翻译授权记录



觉得本文不错的话,分享一下给小伙伴吧~

相关文章:

  • AI 芯片,是金山还是泡沫?
  • 友情链接有什么用
  • Ansible杂记(2)
  • crontab详解
  • call、apply、bind的用法
  • Perl的简单联网操作
  • [svc]NFS存储企业场景及nfs最佳实战探究
  • 1安装Linux
  • underscore源码剖析之整体架构
  • HDU-2087-剪花布条
  • 关于线性基的一丢丢理解
  • 基于阿里雲Oracle12cR2(Linux)實例靜默安装Cloud Control 13c 13.3
  • Spring Boot + thymeleaf 后台与页面(二)
  • vue学习系列(二)vue-cli
  • java8简短教程(持续更新含部分9,10,11)
  • .pyc 想到的一些问题
  • E-HPC支持多队列管理和自动伸缩
  • Javascript 原型链
  • MQ框架的比较
  • October CMS - 快速入门 9 Images And Galleries
  • Puppeteer:浏览器控制器
  • SQLServer之创建数据库快照
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 老板让我十分钟上手nx-admin
  • 学习ES6 变量的解构赋值
  • 一份游戏开发学习路线
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • ( 10 )MySQL中的外键
  • (js)循环条件满足时终止循环
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (一)UDP基本编程步骤
  • (转)大型网站的系统架构
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .net6+aspose.words导出word并转pdf
  • .NET6实现破解Modbus poll点表配置文件
  • .Net面试题4
  • .php文件都打不开,打不开php文件怎么办
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [100天算法】-实现 strStr()(day 52)
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [BIZ] - 1.金融交易系统特点
  • [BZOJ3757] 苹果树
  • [C#]科学计数法(scientific notation)显示为正常数字
  • [C++]:for循环for(int num : nums)
  • [HackMyVM]靶场 Wild
  • [Java]快速入门优先队列(堆)手撕相关面试题
  • [JDBC-1] JDBC Base Template