Vue.observable的使用(小型状态管理器)

简介: Vue.observable的使用(小型状态管理器)

随着项目组件的细化,经常性的遇到多组件之间状态共享的情况,之前可使用Vuex解决这类问题,不过参照Vuex官网介绍,如果应用不够大,为避免代码繁琐冗余,最好不要使用它,今天了解一下Vue.js2.6 新版本中新增的一个东西Vue.observable(object),这个API的出现能替代以前使用vuex进行数据状态管理的方案。通过使用这个 api 我们可以应对一些简单的跨组件数据状态共享的情况。 官网描述如下 Vue.observable( object )

20210527153548522.png

observable()方法,用于设置监控属性,这样就可以监控view视图Module中的属性值的变化,从而就可以动态的改变某个元素中的值,监控属性的类型不变量而是一个函数,通过返回一个函数给viewModule对象中的属性,从而来监控该属性。

新建一个Vue Cli 使用一下Vue.Observable:

新建 store.js

import Vue from "vue"
export const state = Vue.observable({
    count: 0
})

页面1:

<template>
  <div class="observable">
    <h4>Observable1</h4>
    <div class="observable-layout">
      <button @click="add">add</button>
      <h4>{{ count }}</h4>
      <button @click="reduce">reduce</button>
    </div>
    <div><button @click="go">go to Observable2</button></div>
  </div>
</template>
<script>
import { state } from "./store.js";
export default {
  data() {
    return {};
  },
  computed: {
    count() {
      return state.count;
    },
  },
  methods: {
    add() {
      state.count++;
    },
    reduce() {
      state.count--;
    },
    go() {
      this.$router.push({ name: "About" });
    },
  },
};
</script>

页面2:

<template>
  <div class="about">
    <div class="observable">
      <h4 style="color: red">Observable2</h4>
      <div class="observable-layout">
        <button @click="add">add</button>
        <h4>{{ count }}</h4>
        <button @click="reduce">reduce</button>
      </div>
      <div><button @click="go">go back Observable1</button></div>
    </div>
  </div>
</template>
<script>
import { state } from "./observable/store.js";
export default {
  data() {
    return {};
  },
  computed: {
    count() {
      return state.count;
    },
  },
  methods: {
    add() {
      state.count++;
    },
    reduce() {
      state.count--;
    },
    go() {
      this.$router.push({ name: "Observable" });
    },
  },
  created() {
    console.log(this.count);
  },
};
</script>

在 页面1 操作 count ,页面2 数据也会同步;

20210527153548522.png

也可以使用vuex自定义mutation来复用更改状态

import Vue from "vue"
export const state = Vue.observable({
    count: 0
})
export const mutations = {
    add(payload) {
        if (payload > 0) {
            state.count = payload
        }
    },
    reduce(payload) {
        if (payload > 0) {
            state.count = payload
        }
    }
}

具体使用:

<script>
import { state, mutations } from "./store.js";
export default {
  data() {
    return {};
  },
  computed: {
    count() {
      return state.count;
    },
  },
  methods: {
    add() {
      mutations.add(99);
    },
    reduce() {
      mutations.reduce(1);
    },
    go() {
      this.$router.push({ name: "About" });
    },
  },
};
</script>

不想 使用 vuex 做数据共享和更新时 ,可以使用 Vue.observable( Object ),实现多个组件之间数据的共享和更新,更加简洁的实现我们想要的效果


相关文章
|
缓存 网络协议 Ubuntu
Linux基础命令---nfsstat显示nfs状态
nfsstat nfsstat指令用来显示nfs客户端和服务器的活动信息。 此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora。 1、语法 nfsstat [选项] 2、参数列表 -s | --server 只显示服务器信息,默...
7545 0
|
关系型数据库 数据库 PostgreSQL
PostgreSQL 内存表可选项 - unlogged table
标签 PostgreSQL , 内存表 , unlogged table 背景 内存表,通常被用于不需要持久化,变更频繁,访问RT低的场景。 目前社区版本PostgreSQL没有内存表的功能,postgrespro提供了两个插件可以实现类似内存表的功能。
4587 0
|
4月前
|
SQL 缓存 运维
RBAC 权限模型实战:从 ACL 踩坑到 RBAC3 落地(2026)
写过 ACL 才懂 RBAC 的好。本文把 RBAC 权限模型、RBAC0~3、角色继承、互斥约束、用户组、四类权限粒度一次讲透,并附可落地的表设计
1323 0
|
Java 网络安全 Apache
SshClient应用指南:使用org.apache.sshd库在服务器中执行命令。
总结起来,Apache SSHD库是一个强大的工具,甚至可以用于创建你自己的SSH Server。当你需要在服务器中执行命令时,这无疑是非常有用的。希望这个指南能对你有所帮助,并祝你在使用Apache SSHD库中有一个愉快的旅程!
1127 29
|
应用服务中间件 PHP Apache
HAProxy的高级配置选项-ACL篇之匹配访问路径案例
这篇文章介绍了HAProxy的高级配置选项,特别是如何使用ACL(访问控制列表)匹配访问路径以实现不同请求路径的流量分发到不同后端服务器的案例,通过实战配置展示了如何基于URL路径将请求定向到处理静态或动态内容的服务器。
500 5
HAProxy的高级配置选项-ACL篇之匹配访问路径案例
vue2 插槽(默认插槽 slot 、具名插槽 v-slot 、作用域插槽 slot-scope -- 插槽传值 )
vue2 插槽(默认插槽 slot 、具名插槽 v-slot 、作用域插槽 slot-scope -- 插槽传值 )
4255 1
|
网络协议 应用服务中间件 nginx
nginx+squid实现跨越两层的正向代理
场景描述 应用服务器部署在内网中,需要和外网进行交互,但是中间间隔了两个区域,一个区域是业务子区,这个区域不能直接和互联网进行通信,另一个区域是DMZ区域可以和互联网进行通信,因此我们要和互联网进行通信中间隔了两层网络。
6873 0
|
JSON C++ 数据格式
如何在 Visual Studio Code 中使用 Prettier 格式化代码
如何在 Visual Studio Code 中使用 Prettier 格式化代码
2997 0
|
负载均衡 监控 网络协议
在nginx中使用proxy protocol协议
我们已经介绍了haproxy提出的proxy protocol协议,通过proxy protocol协议,服务器端可以获得客户端的真实IP地址和端口,从而可以进行一些非常有意义的操作。 为什么获得客户端的真实IP地址会非常有意义呢?

热门文章

最新文章