1、vue的应用场景、优势、劣势

  • 优势

    • 通常情况下,运行时效率更高:一个事件循环仅一次视图更新,无频繁的DOM操作;
    • 数据与视图分离,通过管理数据流,控制页面的展现,便于维护、且高效;
    • 数据双向绑定,表单操作方便、快捷;
    • 代码风格简约,完全符合前端的书写习惯;
    • 组件管理的方式,更便于代码的复用、管理;单文件组件将每一个独立的功能封装在独立文件中,更灵活;
    • 有较好的插件支持:vue-router、vuex、vue-loader等。
  • 劣势

    • 初始化时间长:

      • 要构建虚拟DOM,其代码风格更符合人的读写习惯,而非DOM解析[react的jsx更符合DOM解析];
      • 编译解析组件,v-if为false则不解析;否则深入解析;
      • DOM的组织和解析以来js文件,需要等待js加载、解析、执行完毕。
  • 应用场景

    • 可用于构建单页spa,数据交互较多的web站点。但不适合简单的页面,或者要求极速的页面需求。虽然它的一般运行性能快,但是仍然有虚拟DOM比对、依赖追踪等性能消耗。

2、数据驱动原理

其响应式数据驱动核心原理,主要有三个部分:

  • 监听:通过defineProperty,对data设置getter、setter,监听数据动向;
  • 订阅器:
    • 订阅器维护一个观察者列表;
    • 当有数据getter时,将相应观察者放入订阅队列;
    • 当有数据setter时,通知订阅器。
  • 观察者:当观察者接收到订阅器消息时,实施dom更新操作。[驱动view变更]

实际的内部实现细节更多、更复杂,包括DOM更新的异步队列、同一事件循环等。

3、路由:vue-router

  • a、使用方法
    <router-link to="/foo">Go to Foo</router-link>
<router-view></router-view>

通过router-link或者router.push实现跳转,新的页面片段将插入router-view当中。

  • b、编程式导航
    <router-link :to="…">      <==>      router.push(…)
push参数:
router.push('home')
router.push({ path: 'home' })
router.push({ name: 'user', params: { userId: 123 }})
router.push({ path: 'register', query: { plan: 'private' }})

路由跳转的方式router.push、router.replace、router.go 与 window.history的操作方法类似。

  • c、重定向 redirect、别名:alias;
  • d、模式:history、 hash 和 abstract,三者表现一致;
  • e、导航钩子:主要用来拦截导航。可设置全局钩子、独享钩子、组件内钩子:

    beforeRouteEnter、beforeRouteUpdate 、beforeRouteLeave;
  • f、过渡动效;页面切换时,进入、退出的动效可以实现页面的流畅切换;
  • g、数据的获取:导航完成后获取;导航完成前获取[beforeRouterEnter];
  • h、保留位置信息:scrollBehavior,返回路由页面的位置信息。仅HTML5 history模式下可用。

推荐使用history模式,由于history模式的地址,可以被服务端捕获,为以后的路由扩展提供更多的可能性。如在要求高性能的应用中,使用同步+异步单页的模式,加速页面的展现。

4、状态管理器:vuex

出现的背景:为了集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。如果有些状态严格属于单个组件,最好还是作为组件的局部状态。

  • vuex的五个核心部分:

    • state:驱动应用的数据源;
    • getters:用于将state状态进行派生,如格式化等操作;
    • mutations:用于更改 store 中的状态;
      • 需遵循Vue 的响应规则,如Vue.set(obj, 'newProp', 123);
      • 使用常量替代 Mutation 事件类型:用于多人合作项目分模块管理;
      • mutation 必须是同步函数。
    • action
      • Action 提交的是 mutation,而不是直接变更状态。
      • Action 可以包含任意异步操作。
    • module:可实现模块动态注册、命名空间等~
  • vuex背后的基本思想



    如图如果存在异步操作,可以通过触发actions,提交相应的mutations,来修改数据的state,最终驱动视图更新。这里值得注意的是,对数据状态的改变,必须通过提交mutations进行。根据vue的深入响应式原理,只有通过mutations的数据修改,会被监听,从而成功驱动视图的更新,否则视图更新将不生效。

  • strict模式,仅开发模式下使用,追踪错误的使用方法[由于会深度监测状态树来检测不合规的状态变更]

  • 简写代码的方法:mapState、mapGetters、mapActions、mapMutations

思考:通过action,可以构建一个数据适配层,处理后端返回的数据,以符合前端业务及组件展现需求,从而将后端数据对前端展现的影响降低。

通过vuex管理数据的流动,可以确保单页spa中的数据状态始终可用,这就给单页应用的页面跳转性能提速又提供了一种手段。

vue2.0读书笔记3 - router、vuex的更多相关文章

  1. vue2.0读书笔记2-进阶

    一.深入响应式原理 二.过渡效果 三.过渡状态 四.Render函数 五.自定义指令 六.混合 七.插件 八.单文件组件 九.生产环境 十.路由 vue-router: http://router.v ...

  2. vue2.0读书笔记1-基础

    一.概述 二.模版语法 三.计算属性 四.class与style绑定 五.条件渲染 六.列表渲染 七.事件处理器 八.表单控件绑定 九.组件 一.概述     在底层的实现上, Vue 将模板编译成虚 ...

  3. vue2.0学习笔记之路由(二)路由嵌套+动画

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. vue2.0学习笔记之路由(二)路由嵌套

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. vue2.0自学笔记

    前言: 一.优点: 轻量级.高效率.上手快.简单易学.文档全面而简洁 二.功能: 1.模板渲染 2.模块化 3.扩展功能:路由.Ajax 三.课程包含: 1.Vue实例 2.Vue组件 3.Vue指令 ...

  6. Vue2.0学习笔记一 :各种表达式

    #,过滤器 #,在Vue2.x中,过滤器只能在mustache绑定中使用,为了在指令帮定中实现同样的行为,你应该使用计算属性:     #,过滤器可以串联 {{ message | filterA | ...

  7. Vue2.0学习笔记

    环境搭建 vue-cli@3    vue-cli@2.X npm i -g @vue/cli 模板语法 文本 <span>Message: {{ msg }}</span> ...

  8. <玩转Django2.0>读书笔记:表单

    1. 表单字段 参考: 官方文档 Django表单字段汇总 2. 表单代码示例(forms.Form) # form.py代码 # 获取数据库数据 choices_list = [(i+1,v['ty ...

  9. <玩转Django2.0>读书笔记:模板和模型

    1. 模板内置标签 Django常用内置标签 标签 描述 {% for %} 遍历输出变量的内容 {% if %} 对变量进行条件判断 {% csrf_token %} 生成csrf_token标签, ...

随机推荐

  1. Mina的ssl加密

    前面写的Mina的示例,都是可以通过telnet登录的,并且可以相互交互. 现在采用ssl加密的方式,对建立连接时,进行加密连接.这样,双方只有统一的加密,然后才可以连接. 密钥的生成之前有说过,里面 ...

  2. ClsoSee(v2) Alpha测试中!这是一个临时的帮助页面...

    Clso See 测试中,最新的更新信息会显示在这里,欢迎您随时关注新版本动态. 您可以单击这里让程序打开本地帮助文件(新说明.txt) 等程序完成后,会制作专门的帮助页面. 因为采用了键盘Hook技 ...

  3. Python 第三方包上传至 PyPI 服务器

    PyPI 服务器主要功能是?PyPI 服务器怎么搭建? PyPI 服务器可以用来管理自己开发的 Python 第三包. Pypi服务器搭建 Python 第三方包在本地打包 # 本地目录执行以下命令应 ...

  4. PHP中操作mysql的函数

    (1)mysql_num_rows(),对应select操作,获取select结果中数据集的行数:(2)mysql_affected_rows(),对应update.delete.insert操作,影 ...

  5. Educational Codeforces Round 26 A B C题

    题目链接 A. Text Volume 题意:计算句子中,每个单词大写字母出现次数最多的那个的出现次数(混不混乱QAQ). 解题思路:注意getchar()就没啥了. #include<cstd ...

  6. tomcat JNDI Resource 配置

    最近公司的项目慢慢开始向Maven项目迁移, 部分配置文件公共组也帮我们做了些改动,其中在spring的applicationContext.xml中看到了数据连接bean存在两个,一个是jndi 一 ...

  7. mysql导入数据错误

    ERROR 29 (HY000): File '/tmp/cun' not found (Errcode: 13) # sudo /etc/init.d/apparmor reload(重新加载) 大 ...

  8. 【PaddlePaddle系列】CIFAR-10图像分类

    前言 本文与前文对手写数字识别分类基本类似的,同样图像作为输入,类别作为输出.这里不同的是,不仅仅是使用简单的卷积神经网络加上全连接层的模型.卷积神经网络大火以来,发展出来许多经典的卷积神经网络模型, ...

  9. 马哥Python 开发9期

    LVS工作模式: 传输层 会话保持:负载均衡(1) session sticky:同一用户调度固定服务器Source IP:LVS sh算法(对某一特定服务而言)Cookie(2) session r ...

  10. spring boot启动加载数据

    实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求.为了解决这样的问题,spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来实 ...