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 ),实现多个组件之间数据的共享和更新,更加简洁的实现我们想要的效果


相关文章
|
网络协议 Unix Linux
十几个免费好用的抓包工具
十几个免费好用的抓包工具
|
C++ 索引
Windows10下VS2015下载安装详解【附“安装包丢失或损坏“ 错误解决方法】
Windows10下VS2015下载安装详解【附“安装包丢失或损坏“ 错误解决方法】
7884 0
Windows10下VS2015下载安装详解【附“安装包丢失或损坏“ 错误解决方法】
Echarts实战案例代码(34):柱状图箭头增长下降
Echarts实战案例代码(34):柱状图箭头增长下降
514 0
Lodash学习之数组取交集
Lodash学习之数组取交集
2484 0
Lodash学习之数组取交集
|
存储 缓存 JavaScript
当Vue.observable()遇上Vuex:选择最佳状态管理方案的指南
【8月更文挑战第27天】在构建大型Vue应用程序时,合理管理组件间共享状态至关重要。本文深入探讨了Vuex和Vue.observable()两种状态管理工具的特点。Vue.observable()以其简洁的API适用于小型至中型项目,而Vuex遵循严格的Flux架构,专为复杂的大中型应用设计,确保状态变化的可预测性和高效性。通过示例代码比较两者实现方式,展示了尽管Vuex操作更为复杂,却能带来更好的可维护性和扩展性。最终,开发者可根据项目的具体需求和规模来选择最适合的状态管理方案。
176 0
|
9月前
|
存储 设计模式 JavaScript
Vue 组件化开发:构建高质量应用的核心
本文深入探讨了 Vue.js 组件化开发的核心概念与最佳实践。
525 1
|
JavaScript 前端开发
解密 Vue.observable
Vue.observable 是 Vue 2.6 引入的一个新功能,用于创建可观察的对象。它的 **`主要作用是将一个普通的 JavaScript 对象转换为一个可观察的对象,使得当对象的属性发生变化时,可以自动触发相应的响应式更新。
|
12月前
|
存储 缓存 监控
Vue.js 九个性能优化技巧
【10月更文挑战第16天】Vue.js 性能优化是一个持续的过程,需要我们不断地探索和实践。通过合理使用上述九个技巧,并结合具体的项目需求和性能指标,我们可以不断地提高 Vue.js 应用的性能和用户体验。
|
存储 SQL 关系型数据库
数据库设计的基本原则和主要步骤以及应注意什么?
数据库设计的基本原则和主要步骤以及应注意什么?
620 0
|
存储 缓存 网络协议
SYN Flood是什么?这篇给你讲明白!
SYN Flood是1994年发现的DDoS攻击方式,利用TCP三次握手的漏洞,通过发送大量伪造源IP的SYN报文,使服务器创建半连接,耗尽资源,导致服务中断。防御策略包括源认证、首包丢弃和使用Anti-DDoS系统。高防服务器和抗D盾等解决方案提供DDoS清洗和CC攻击防御,通过智能分布式云接入隐藏真实IP,保持TCP连接稳定,同时提供网络加速和防掉线功能。