Vue Watch 的原理 和 $nextTick() 通俗理解
网上watch和$nextTick()解释比较复杂,涉及到promise,h5的dom发生变化的新api等复杂代码,下列就是两个参考。
【watch原理】
【$nextTick()】
首先,看遇到问题代码:
<template>
  <div>
    <button @click="changeList">我要变成童话里大灰狼,嘿嘿!</button>
  </div>
</template>
<script>
export default {
  data () {
    return {
      isfirst: true,
      num: 0
    };
  },
  watch: {
    'num': function (val) {
      if (val > 0 && this.isfirst) {
        console.log('我改变了'); // 是不会之执行的
      }
      console.log('我又改变了'); // 只会执行之一段
    }
  },
  methods: {
    changeList () {
      this.num += 1;
      this.isfirst = false;
    }
  }
}
</script>
简单用watch的原理实现上述代码,如下:
// es6
class Parent () {
	// ...
	get num () {
		return this.val;
	}
	set num (val) {
		this.val = val;
		// watch 原始把回调放在这里
		isfirst && cb(); // 步骤1
	}
	// ...
}
// es5的写法
defindeProperty(new Parent(), 'num', {
	get: () => this.val,
	set (val) {
		this.val = val;
		// watch 原始把回调放在这里
		isfirst && cb(); // 步骤1
	}
});
const parent = new Parent();
parent.num = 2;
isfirst = false; // 步骤2
先执行步骤1,还步骤2?答案是步骤 2。我想要的就结果是步骤1执行完,在执行步骤2。
vue提供vm.$nextTick(fn(){})。
methods: {
  changeList () {
    this.num += 1;
    this.$next(()=> {
	    this.isfirst = false;
    });
  }
}
Vue Watch 的原理 和 $nextTick() 通俗理解的更多相关文章
- 举个例子去理解vuex(状态管理),通俗理解vuex原理,通过vue例子类比
		通俗理解vuex原理---通过vue例子类比 本文主要通过简单的理解来解释下vuex的基本流程,而这也是vuex难点之一. 首先我们先了解下vuex的作用vuex其实是集中的数据管理仓库,相当于数 ... 
- 手摸手带你理解Vue的Computed原理
		前言 computed 在 Vue 中是很常用的属性配置,它能够随着依赖属性的变化而变化,为我们带来很大便利.那么本文就来带大家全面理解 computed 的内部原理以及工作流程. 在这之前,希望你能 ... 
- 手摸手带你理解Vue的Watch原理
		前言 watch 是由用户定义的数据监听,当监听的属性发生改变就会触发回调,这项配置在业务中是很常用.在面试时,也是必问知识点,一般会用作和 computed 进行比较. 那么本文就来带大家从源码理解 ... 
- Vue中$nextTick的理解
		Vue中$nextTick的理解 Vue中$nextTick方法将回调延迟到下次DOM更新循环之后执行,也就是在下次DOM更新循环结束之后执行延迟回调,在修改数据之后立即使用这个方法,能够获取更新后的 ... 
- Redis Hyperloglog的原理及数学理论的通俗理解
		redis中有一种数据格式,hyperloglog,本文就此数据结构的作用.redis的实现及其背后的数学原理作一个整理.当然本文不包含任何数学公式,而是希望用直观的例子帮大家理解. 主要内容如下: ... 
- Vue源码解析之nextTick
		Vue源码解析之nextTick 前言 nextTick是Vue的一个核心功能,在Vue内部实现中也经常用到nextTick.但是,很多新手不理解nextTick的原理,甚至不清楚nextTick的作 ... 
- Vue视图渲染原理解析,从构建VNode到生成真实节点树
		前言 在 Vue 核心中除了响应式原理外,视图渲染也是重中之重.我们都知道每次更新数据,都会走视图渲染的逻辑,而这当中牵扯的逻辑也是十分繁琐. 本文主要解析的是初始化视图渲染流程,你将会了解到从挂载组 ... 
- vue双向数据绑定原理探究(附demo)
		昨天被导师叫去研究了一下vue的双向数据绑定原理...本来以为原理的东西都非常高深,没想到vue的双向绑定真的很好理解啊...自己动手写了一个. 传送门 双向绑定的思想 双向数据绑定的思想就是数据层与 ... 
- Effective Java通俗理解(下)
		Effective Java通俗理解(上) 第31条:用实例域代替序数 枚举类型有一个ordinal方法,它范围该常量的序数从0开始,不建议使用这个方法,因为这不能很好地对枚举进行维护,正确应该是利用 ... 
随机推荐
- Cordova 项目 加载不出XML文件
			解决方法:copy bundle 将文件移除再添加 
- jquery $('#form1').serialize()序列化提交表单
			1.$("#form1").serialize() 把form表单的值序列化成一个字符串,如username=admin&password=admin123 <for ... 
- 5款最好的免费在线网站CSS验证器
			这里是一个名单, 5免费在线CSS验证器的网站.这些网站让你验证你的CSS代码的自由,没有任何麻烦.你可以选择上传文件,验证CSS添加URL,或简单的复制和粘贴完整的CSS代码.好的方面是,这些网站不 ... 
- go语言关键字图示
			Go语言一共有25个关键字,除了select,上文基本上已经一网打尽了.为了加深印象,我们用一张结构图来说明一下: 这张图如果看不清的话,我们将其拆成两张图,再注掉分支流程那部分的局部图: 分支流程部 ... 
- SAP Brazil J1BTAX 为税收例外创建税收组(翻译)
			很多人对如何维持巴西的税收仍有疑问.前段时间,一家有几个税务问题的公司联系我帮助他们,我发现多年来,由于他们的税务计算系统缺少配置,他们正在进行手动调整. 维持税收的第一条规则是: TAXBRJ = ... 
- 搭建Airflow数据流调度器
			服务器使用的是centos系统,需要安装好pip和setuptools,同时注意更新安装的版本 接下来参考安装好Airflow Airflow 1.8 工作流平台搭建 http://blog.csdn ... 
- Linux set、env、declare、export显示shell变量的区别
			目录 Linux中 set.env.declare.export显示shell变量的区别 1. shell局部变量 2. 用户的环境变量 显示shell变量 declare 命令 export 命令 ... 
- cocos2dx添加新的类后出现错误undefined reference to的解决办法
			使用cocos compile -p android编译cocos2dx项目的时候出现如下错误(新建了TestScene.h,TestScene.cpp): jni/../../Classes/App ... 
- How not to alienate your reviewers, aka writing a decent rebuttal?
			[forwarded from https://nebelwelt.net/blog/20180704-rebuttal.html] Assuming you have given everythin ... 
- 如何看待淘宝二手交易APP“闲鱼”推出的新功能“闲鱼小法庭”?
			转:https://www.zhihu.com/question/55487716?utm_source=qq&utm_medium=social 
