p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px "Helvetica Neue"; color: #404040 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "Helvetica Neue"; color: #404040 }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px "Helvetica Neue"; color: #737373 }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px "Helvetica Neue"; color: #0069d6 }
li.li3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px "Helvetica Neue"; color: #737373 }
span.s1 { }
span.s2 { font: 13.0px "Helvetica Neue"; text-decoration: underline; color: #0069d6 }
span.s3 { text-decoration: underline }
ul.ul1 { list-style-type: disc }

 

React组件的属性

React是一个单纯的view层框架,官方推荐使用JSX预发来维护组件的状态.通过Props和state来共同决定组件的表现.

  • Props

    正如prop的英文意思[属性]一样,Props中的数据主要用来定义和描述组件的属性,该数据是由父组件在声明React组件的时候设置,就好比我们给一个img标签设置一个src属性一样,我们可以给自定义的React组件设置许多属性. 这些属性定义了React组件的表现形式,父组件可以通过修改Props中的属性来控制子组件的表现.
  • state

    同样的,state表示[状态],那么state中的数据主要用来控制组件内部的状态. 也就是说组件内部的变化,不需要同外部有交互的数据,都可以有组件自己通过state来控制.

React 虚拟树更新原则

React中应用虚拟DOM来更新快速更新DOM,那么更新虚拟DOM的原则主要是以下几种:

  • 不同元素

    如果更新前后是两种不同类型的DOM元素,那就没什么说的,直接销毁原来的节点,创建新的节点.(比如原来是div,更新为span)在这个过程中,原来节点的componentWillUnmount函数被触犯, 新节点的componentWillMount和componentDidMount依次被触发. 需要特别指出的是,当前更新节点的所有子节点都会被销毁重建,而不管子节点是否有更新. 简单的来说,就是根变了,那么这个根上的所有叶子都要更新了.
  • 相同元素,不同属性

    当节点类型没有发生变化,而只是熟悉变化的话,React就智能多了,只会更新变化的部分. 好比是一个元素有多个CSS样式,如果只变化了一个样式,那么React也只更新一个. 当元素不是叶子节点的时候,也就是一个组件元素的时候,会继续深入的去比较子元素来更新子元素.
  • 子元素变动.

    当子元素有变动的时候,React会更新子元素.

    子元素的变动指的是资源的类型/属性/位置等的变动. 类型和属性的变动会触发更新,这个比较好理解.子元素的位置变动,指的是如果一个资源原来在第一位,更新后到第二位了,React会认为这是一种变动,从而触发更新.
  • key属性的重要作用

    这样看起来React也没有那么智能.那么这个时候就要引入一个很重要的key属性.React通过给子组件一个key属性.来唯一标识一个子组件,如果更新前后的组件key值一样,并且除了位置之外其他属性没有变化,那么就不会触发更新.

Vue的数据

Vue是一个传统意义上的mvc模型.通过实例化一个vue对象来绑定dom和data的关系,也就是绑定view和model.通过对model中每个属性添加[反射]来完成监视器的注册. 当model中的数据模型变化时,watcher会重新计算,从而引发view层的更新.

这也就是理解了为什么Vue是单向数据流了

Vue的更新.

上面提到,vue的更新是model中数据的变化引发在初始化时注入的watcher的变化,从而引起view层的更新.只要观察到数据变化,Vue 将开启一个队列,并缓冲在同一事件循环中发生的所有数据改变。如果同一个 watcher 被多次触发,只会一次推入到队列中。

根据以上特点,我们知道vue中的组件更新是有model数据的更新引起的,因为view和model在初始化时已经完成绑定,所以当model发生变化时,哪些view需要变化已经很明确了,所以就不需要像React那般去判断比对了.

React和Vue的组件更新比较的更多相关文章

  1. vue中子组件更新父组件

    当在子组件里更改了某些信息且关闭子组件后,需要父组件更新修改后的内容,该如何操作 1.$emit触发 父组件 @add="add(val)" 子组件 this.$emit('add ...

  2. Vue 子组件更新父组件的值

    今天在使用Vue中遇到了一个新的需求:子组件需要修改由父组件传递过来的值,由于子组件的值是由父组件传递过来的,不能直接修改属性的值, 我们想改变传递过来的值只能通过自定义事件的形式修改父组件的值达到修 ...

  3. vue父组件更新,子组件也更新的方法

    1.父组件 使用 Math.ramdom() 2.子组件获取 然后监听这个ramdom变化,处理子组件的更新

  4. 从 Vue 的视角学 React(四)—— 组件传参

    组件化开发的时候,参数传递是非常关键的环节 哪些参数放在组件内部管理,哪些参数由父组件传入,哪些状态需要反馈给父组件,都需要在设计组件的时候想清楚 但实现这些交互的基础,是明白组件之间参数传递的方式, ...

  5. WijmoJS V2019.0 Update2发布:再度增强 React 和 Vue 框架的组件功能

    前端开发工具包 WijmoJS 在2019年的第二个主要版本 V2019.0 Update2 已经发布,本次发布涵盖了React 和 Vue 框架下 WijmoJS 前端组件的功能增强,并加入更为易用 ...

  6. Vue父组件向子组件传递一个动态的值,子组件如何保持实时更新实时更新?

    原文:https://blog.csdn.net/zhouweixue_vivi/article/details/78550738 2017年11月16日 14:22:50 zhouweixue_vi ...

  7. 三大前端框架(react、vue、angular2+)父子组件通信总结

    公司业务需要,react.vue.angular都有接触[\无奈脸].虽然说可以拓展知识广度,但是在深度上很让人头疼.最近没事的时候回忆各框架父子组件通信,发现很模糊,于是乎稍微做了一下功课,记录于此 ...

  8. React.js 小书 Lesson20 - 更新阶段的组件生命周期

    作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson20 转载请注明出处,保留原文链接和作者信息. 从之前的章节我们了解到,组件的挂载指的是将组件 ...

  9. 从 React 的组件更新谈 Immutable 的应用

    在介绍 Immutable 如何在 React 中应用之前,先来谈谈 React 组件是如何更新的. React 是基于状态驱动的开发,可以将一个组件看成是一个有限状态机,组件要更新,必须更新状态. ...

随机推荐

  1. 安装nginx+ngx_lua支持WAF防护功能

    安装nginx+ngx_lua支持WAF防护功能 nginx lua模块淘宝开发的nginx第三方模块,它能将lua语言嵌入到nginx配置中,从而使用lua就极大增强了nginx的能力.nginx以 ...

  2. com.mysql.jdbc.exceptions.MySQLSyntaxErrorException错误

    com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the ...

  3. 排座椅 2008 NOIP 普及组 第二题

    题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳.同学 ...

  4. python_求相邻数

    什么是相邻数? 比如5,相邻数为4和6,和5相差1的数,连续相差为1的一组数 需求: 遍历inputList 所有数字,取出所有数字,判断是否有相邻数, 不相邻数字 和 相邻数字 都以 “数组”形式 ...

  5. ECC椭圆曲线详解(有具体实例)

    前言 ECC英文全称"Ellipse Curve Cryptography" 与传统的基于大质数因子分解困难性的加密方法不同,ECC通过椭圆曲线方程式的性质产生密钥 ECC164位 ...

  6. 【EntityFramework 6.1.3】个人理解与问题记录(3)

    前言 说点题外话:前几天接连微软老爹发布了 .net core 2.0 / asp.net core 2.0 / ef core 2.0 / .net standard 2.0(此处撒花,不管是否后面 ...

  7. 【每天一道算法题】Numeric Keypad

    题目描述 The numberic keypad on your mobile phone looks like below: 123 456 789  0  suppose you are hold ...

  8. DVWA笔记之一:brute Force

    1.Low 级别 burpsuite抓包 low级别是使用GET请求进行登录,将其发送到Intruder中,并增加password变量 之后选择字典开始攻击. 暴力破解完成后,查看结果RESULT,根 ...

  9. How to call C/C++ sytle function from C# solution?

    1. Write native(unmanaged) code with C/C++, and make sure compile it as a DLL, the sample is as belo ...

  10. python编码错误

    初学python,遇到的最难忘的坑没有之一.这个问题起码困扰了我一周.在我写了一段代码之后经常遇见这样的报错. 本质原因是我用的python2,在编码流派中python2是比较奇葩的一派,不随大流.所 ...