提前使用Vue 3.0新特性,vue-function-api尝鲜

栏目: 编程语言 · 发布时间: 4年前

内容简介:Vue3.0的预告已经快一年了,本月的Vue Conf大会上尤雨溪放出了Vue 3.0最重要的RFC,即Function-based API,有不少的小伙伴对此提出质疑。对此,我也想知道这样的一个升级究竟能带来怎样的改变。正好VueJs的开发团队放出了基于Vue2.0的vue-function-api插件,可以在Vue2.0上进行function-api的尝鲜,作为新技术的狂热追求者,必须要试一试的。上面是一个基于function-api简单的显示当前时间的实例代码,关于为什么在外部改变变量的时候能够触发视

Vue3.0的预告已经快一年了,本月的Vue Conf大会上尤雨溪放出了Vue 3.0最重要的RFC,即Function-based API,有不少的小伙伴对此提出质疑。对此,我也想知道这样的一个升级究竟能带来怎样的改变。

正好VueJs的开发团队放出了基于Vue2.0的vue-function-api插件,可以在Vue2.0上进行function-api的尝鲜,作为新技术的狂热追求者,必须要试一试的。

Talk is less, show me the code.

示例

<template>
  <div id="app">
    {{time.getHours() + ':' + time.getMinutes() + ':' + time.getSeconds()}}
  </div>
</template>
<script lang="ts">
  import {interval} from 'rxjs/observable/interval';
  import {value as Wrapper} from 'vue-function-api';

  const time = Wrapper(new Date());
  interval(100).pipe().subscribe(() => {
    time.value = new Date();
  });

  export default {
    setup() {
      return {time};
    }
  };
</script>
复制代码

解析

上面是一个基于function-api简单的显示当前时间的实例代码,关于为什么在外部改变变量的时候能够触发视图变化,这个问题我相信关注function-api的伙伴们应该都清除了,就不再多说。

可以看到,定义变量和修改变量的代码都是在组件属性对象的外部声明的,这里为了直观放在了同一个文件,其实可以把这部分代码提取出来:

新建一个time.ts文件

import {value as Wrapper} from 'vue-function-api';
import {interval} from 'rxjs/observable/interval';

const time = Wrapper(new Date());
interval(100).pipe().subscribe(() => {
  time.value = new Date();
});

export default time;
复制代码

这时候Vue文件就只剩下:

<template>
  <div id="app">
    {{time.getHours() + ':' + time.getMinutes() + ':' + time.getSeconds()}}
  </div>
</template>
<script lang="ts">
  import time from './time';

  export default {
    setup() {
      return {time};
    }
  };
</script>
复制代码

运行完全没问题

这样我们可以在需要显示当前时间的不同组件中引入time这个对象,把它展示出来就OK了。

相信看到这里不少的小伙伴心中已经有些想法了,这不就是vuex的功能吗?没错,这就是一个全局共享数据的实现,和使用vuex完全是一样的,但是比vuex更灵活,并且我们不需要额外的状态管理插件就能实现状态管理了。

watch

看完上面的部分,相信大家已经对function-api的设计方式有了一定的理解,那么我们再来看看watch。

关于Vue2.0的watch有一个诟病的地方,就是被watch的路径是一个字符串,在维护上非常麻烦(比如说重构),如果使用对象引用的方式,就不存在这样的问题了。

const api = require('vue-function-api');
const Vue = require('vue');
const { interval } = require('rxjs/observable/interval');
Vue.use(api.plugin);
const value = api.value(new Date());
api.watch(() => value.value, (val, old) => {
  if (old && val.getSeconds() !== old.getSeconds()) {
    console.log(`seconds changed from ${old.getSeconds()} to ${val.getSeconds()}`);
  }
});
interval(100)
    .pipe()
    .subscribe(() => {
      value.value = new Date();
    });
复制代码

上面的代码可以直接在js中运行, 也是可以和组件剥离的。

今天主要讲的是一个简单的尝试,至于function-api的使用场景,仍然要在实践中去探索。并且Vue2.0的function-api插件也不建议在生产环境中使用,一切等3.0正式发布再说。


以上所述就是小编给大家介绍的《提前使用Vue 3.0新特性,vue-function-api尝鲜》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Agile Web Development with Rails 4

Agile Web Development with Rails 4

Sam Ruby、Dave Thomas、David Heinemeier Hansson / Pragmatic Bookshelf / 2013-10-11 / USD 43.95

Ruby on Rails helps you produce high-quality, beautiful-looking web applications quickly. You concentrate on creating the application, and Rails takes care of the details. Tens of thousands of deve......一起来看看 《Agile Web Development with Rails 4》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具