美文网首页马文的地下室
学习笔记《Vue 的响应式编程》

学习笔记《Vue 的响应式编程》

作者: 马文Marvin | 来源:发表于2017-04-12 19:22 被阅读42次

在使用 Vue 实现 SPA 系统的时候,响应式编程是一套最核心的理念,整个系统根据数据对象对页面进行反向渲染,让站点避免结构混乱的问题

举个例子

先从官方文档里面摘录一个响应式编程的例子:

模板部分:

<div id="example">
  <p>Original message: "{{ message }}"</p>
  <p>Computed reversed message: "{{ reversedMessage }}"</p>
</div>

Vue 部分:

window.vm1 = new Vue({
  el: '#example',
  data: {
    message: 'Hello'
  },
  computed: {
    reversedMessage: function () {
      return this.message.split('').reverse().join('')
    }
  }
})

在这个例子中,如果在浏览器的调试工具栏里面运行:

vm1.message = 'time'

则模板中的两个内容都会同时变化,也就是说,作为 computed 方法下面的 reversedMessage 属性的值,会实时监控 message 的值,在 message 值发生变化的时候进行跟随的变化,并渲染到页面中

computed 和 methods 的差别

如果把上面的例子进行简单的替换,模板部分的 reversedMessage 换成 reversedMessage() :

<div id="example">
  <p>Original message: "{{ message }}"</p>
  <p>Computed reversed message: "{{ reversedMessage() }}"</p>
</div>

Vue 部分把 computed 替换成 methods:

window.vm1 = new Vue({
  el: '#example',
  data: {
    message: 'Hello'
  },
  methods: {
    reversedMessage: function () {
      return this.message.split('').reverse().join('')
    }
  }
})

也会有完全类似的效果(在调试栏输入 vm1.message = 'time' 依然可以保持两个数据的响应),唯一的区别是 computed 会借助缓存以获取更好的性能

the difference is that computed properties are cached based on their dependencies. A computed property will only re-evaluate when some of its dependencies have changed.

In comparison, a method invocation will always run the function whenever a re-render happens.

Why do we need caching? Imagine we have an expensive computed property A, which requires looping through a huge Array and doing a lot of computations. Then we may have other computed properties that in turn depend on A. Without caching, we would be executing A’s getter many more times than necessary! In cases where you do not want caching, use a method instead.

PS:另一个差别是 mapState 这个方法只能在 computed 中使用,methods 中无效

computed 和 watch 的差别

watch 是依照 AngularJS 的习惯进行的数据监测方式,直接监控某个属性的变化情况,并进行相应的值修改,而 computed 并不监控属性,而是监控方法里面的参数值,看一个使用 watch 的例子

模板部分:

<div id="example">
    <p>Original message: "@{{ message }}"</p>
    <p>Computed reversed message: "@{{ reversedMessage }}"</p>
</div>

Vue 部分:

window.vm1 = new Vue({
  el: '#example',
  data: {
    message: 'Hello',
    reversedMessage: 'olleH',
  },
  watch: {
    message: function (val) {
      this.reversedMessage = val.split('').reverse().join('')
    }
  }
})

相关文章

  • (24)打鸡儿教你Vue.js

    学习Vue基础语法Vue中的组件Vue-cli的使用 1、使用Vue2.0版本实现响应式编程2、理解Vue编程理念...

  • Vue学习笔记---暂保存

    Vue的学习笔记 一 Vue基本 1. Vue的设计理念 Vue响应式原理[https://www.process...

  • 学习笔记《Vue 的响应式编程》

    在使用 Vue 实现 SPA 系统的时候,响应式编程是一套最核心的理念,整个系统根据数据对象对页面进行反向渲染,让...

  • vue 3.0 笔记

    vue 3.0 笔记 1、Vue 3.0 如何做到性能提升 响应式系统升级使用 Proxy 对象重写响应式系统:v...

  • RxSwift初探(1)

    一、前提:函数响应式编程思想 简单来说 函数响应式编程 = 函数式编程 + 响应式编程 (1)函数式 函数式编程是...

  • 前端面试题【Day02】

    本篇绪论 1,Vue响应式原理 1,Vue响应式原理 在vue实例中声明的数据就是响应式的。响应式:数据发生改变,...

  • RxJava

    响应式编程概述 什么是响应式编程? 是一种基于异步数据流概述的编程模式 响应式编程--关键概念 事件 响应式编程-...

  • iOS-Main-响应式编程的介绍&MVVM的特点

    响应式编程响应式编程 MVVM的特点

  • 状态管理

    响应式的编程框架中都会有一个永恒的主题——“状态管理”,无论是在React/Vue(两者都是支持响应式编程的web...

  • Swift5.0 - day13 - 响应式编程

    一、响应式编程 1.1、响应式编程(Reactive Programming,简称RP)响应式编程是一种编程范式,...

网友评论

    本文标题:学习笔记《Vue 的响应式编程》

    本文链接:https://www.haomeiwen.com/subject/qhumattx.html