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

建立自己的网站平台的好处bt搜索引擎下载

建立自己的网站平台的好处,bt搜索引擎下载,手机商城网站建设设计方案,宁波工业设计最好的公司Observable 翻译过来我们可以理解成可观察的 Vue.js2.6 新增 Vue.observable,让一个对象变成响应式数据。Vue 内部会用它来处理 data 函数返回的对象 。 返回的对象可以直接用于渲染函数和计算属性内,并且会在发生变更时触发相应的更新。也可以作为最小化…

Observable 翻译过来我们可以理解成可观察的

Vue.js2.6 新增

Vue.observable,让一个对象变成响应式数据。Vue 内部会用它来处理 data 函数返回的对象 。

返回的对象可以直接用于渲染函数和计算属性内,并且会在发生变更时触发相应的更新。也可以作为最小化的跨组件状态存储器

Vue.observable({ count : 1})
其作用等同于
new vue({ count : 1})

 在 Vue 2.x 中,被传入的对象会直接被 Vue.observable 变更,它和被返回的对象是同一个对象

在 Vue 3.x 中,则会返回一个可响应的代理,而对源对象直接进行变更仍然是不可响应的

Observable 是什么

Vue.observable 是 Vue.js 提供的一个 API,它可以将一个普通的 JavaScript 对象转换为响应式对象。通过使用 Vue.observable,可以在任何地方创建一个响应式对象,而不仅仅是在 Vue 实例中使用。它在 Vue.js 的响应式系统中扮演了很重要的角色,可以用于管理状态、状态共享等场景。

Observable 作用

使用 Vue.observable 可以将一个普通对象转换为响应式对象,从而使其成为 Vue.js 的响应式系统的一部分。在转换之后,可以对该对象进行读取、修改等操作,并且在修改后,Vue.js 会自动进行重新渲染。

解决了什么问题

Vue.observable 的出现解决了在 Vue.js 中管理状态的问题。在 Vue.js 中,通过将状态保存在 Vue 实例的 data 属性中,可以实现状态管理,但是这种方式只能在 Vue 实例中使用,无法在其他地方使用。通过使用 Vue.observable,我们可以在任何地方创建一个响应式对象,从而更加灵活地管理状态。

适用场景

非父子组件通信时,可以使用通常的bus或者使用vuex,但是实现的功能不是太复杂,而使用上面两个又有点繁琐。这时,observable就是一个很好的选择。

举个例子:

// utils.js 文件
import Vue from 'vue'
// 创建响应式对象
export const state = Vue.observable({count: 1
})export const mutations = Vue.observable({increase() {state.count++}
})
// 在 vue 文件中使用
<template><div id="app"><button @click="increaseCount">+</button>{{ num }}</div>
</template><script>
import { state, mutations } from '@/utils/index'
export default {name: 'App',computed: {num() {return state.count}},methods: {increaseCount: mutations.increase}
}
</script>

原理分析

源码位置:src\core\observer\index.js

export function observe (value: any, asRootData: ?boolean): Observer | void {if (!isObject(value) || value instanceof VNode) {return}let ob: Observer | void// 判断是否存在__ob__响应式属性if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {ob = value.__ob__} else if (shouldObserve &&!isServerRendering() &&(Array.isArray(value) || isPlainObject(value)) &&Object.isExtensible(value) &&!value._isVue) {// 实例化Observer响应式对象ob = new Observer(value)}if (asRootData && ob) {ob.vmCount++}return ob
}

Observer

export class Observer {value: any;dep: Dep;vmCount: number; // number of vms that have this object as root $dataconstructor (value: any) {this.value = valuethis.dep = new Dep()this.vmCount = 0def(value, '__ob__', this)if (Array.isArray(value)) {if (hasProto) {protoAugment(value, arrayMethods)} else {copyAugment(value, arrayMethods, arrayKeys)}this.observeArray(value)} else {// 实例化对象是一个对象,进入walk方法this.walk(value)}
}

walk函数

walk (obj: Object) {const keys = Object.keys(obj)// 遍历key,通过defineReactive创建响应式对象for (let i = 0; i < keys.length; i++) {defineReactive(obj, keys[i])}
}

defineReactive方法

export function defineReactive (obj: Object,key: string,val: any,customSetter?: ?Function,shallow?: boolean
) {const dep = new Dep()const property = Object.getOwnPropertyDescriptor(obj, key)if (property && property.configurable === false) {return}// cater for pre-defined getter/settersconst getter = property && property.getconst setter = property && property.setif ((!getter || setter) && arguments.length === 2) {val = obj[key]}let childOb = !shallow && observe(val)// 接下来调用Object.defineProperty()给对象定义响应式属性Object.defineProperty(obj, key, {enumerable: true,configurable: true,get: function reactiveGetter () {const value = getter ? getter.call(obj) : valif (Dep.target) {dep.depend()if (childOb) {childOb.dep.depend()if (Array.isArray(value)) {dependArray(value)}}}return value},set: function reactiveSetter (newVal) {const value = getter ? getter.call(obj) : val/* eslint-disable no-self-compare */if (newVal === value || (newVal !== newVal && value !== value)) {return}/* eslint-enable no-self-compare */if (process.env.NODE_ENV !== 'production' && customSetter) {customSetter()}// #7981: for accessor properties without setterif (getter && !setter) returnif (setter) {setter.call(obj, newVal)} else {val = newVal}childOb = !shallow && observe(newVal)// 对观察者watchers进行通知,state就成了全局响应式对象dep.notify()}})
}

http://www.shuangfujiaoyu.com/news/20479.html

相关文章:

  • 网站这么推广seo推广教学
  • 做网站的电销话术系统优化app
  • 网站建设需求问卷qq群排名优化软件
  • 腾讯地图北斗导航下载广州推广seo
  • 重庆秀山网站建设费用windows优化大师怎么彻底删除
  • 中型网站开发周期百度一下移动版首页
  • 有什么做网站的公司广告网络推广怎么做
  • 哪些网站可以免费做h5seoul是什么品牌
  • 上线一个网站需要多少钱广州网站建设工作室
  • 多就能自己做网站独立站建站需要多少钱
  • 专业的深圳网站建设公司哪家好网络推广工作好做不
  • 做网站详细步骤刷赞网站推广永久
  • 网站为什么改版关键词优化的策略有哪些
  • jsp动态网站开发心得软文广告例子
  • 网站有哪些功能网站托管服务商
  • 货到付款网站怎么做可以推广的平台
  • 人力资源做网站的好处最彻底的手机优化软件
  • 旅行做攻略的网站如何在百度上发布自己的文章
  • 网站规划有前途吗企业培训平台
  • 网站url可以在自己做吗中国大数据平台官网
  • 哪些网站容易被百度收录百度百度地图
  • 网站建设投标书服务方案范本网站优化包括对什么优化
  • 网页设计大赛新闻稿seo和sem的概念
  • 莱芜做网站建设的公司百度搜索app下载
  • 有一个做炫舞官网活动的网站客户推广渠道有哪些
  • 在国外做热情网站的风险搜索引擎名词解释
  • 国外的一个大学生做的匿名社交网站百度渠道开户哪里找
  • 专门做二手手机的网站新平台怎么推广
  • 红河优才网站建设代做关键词收录排名
  • 做网站排名seo搜索引擎优化的简写是