React和Vue的组件更新比较
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的组件更新比较的更多相关文章
- vue中子组件更新父组件
当在子组件里更改了某些信息且关闭子组件后,需要父组件更新修改后的内容,该如何操作 1.$emit触发 父组件 @add="add(val)" 子组件 this.$emit('add ...
- Vue 子组件更新父组件的值
今天在使用Vue中遇到了一个新的需求:子组件需要修改由父组件传递过来的值,由于子组件的值是由父组件传递过来的,不能直接修改属性的值, 我们想改变传递过来的值只能通过自定义事件的形式修改父组件的值达到修 ...
- vue父组件更新,子组件也更新的方法
1.父组件 使用 Math.ramdom() 2.子组件获取 然后监听这个ramdom变化,处理子组件的更新
- 从 Vue 的视角学 React(四)—— 组件传参
组件化开发的时候,参数传递是非常关键的环节 哪些参数放在组件内部管理,哪些参数由父组件传入,哪些状态需要反馈给父组件,都需要在设计组件的时候想清楚 但实现这些交互的基础,是明白组件之间参数传递的方式, ...
- WijmoJS V2019.0 Update2发布:再度增强 React 和 Vue 框架的组件功能
前端开发工具包 WijmoJS 在2019年的第二个主要版本 V2019.0 Update2 已经发布,本次发布涵盖了React 和 Vue 框架下 WijmoJS 前端组件的功能增强,并加入更为易用 ...
- Vue父组件向子组件传递一个动态的值,子组件如何保持实时更新实时更新?
原文:https://blog.csdn.net/zhouweixue_vivi/article/details/78550738 2017年11月16日 14:22:50 zhouweixue_vi ...
- 三大前端框架(react、vue、angular2+)父子组件通信总结
公司业务需要,react.vue.angular都有接触[\无奈脸].虽然说可以拓展知识广度,但是在深度上很让人头疼.最近没事的时候回忆各框架父子组件通信,发现很模糊,于是乎稍微做了一下功课,记录于此 ...
- React.js 小书 Lesson20 - 更新阶段的组件生命周期
作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson20 转载请注明出处,保留原文链接和作者信息. 从之前的章节我们了解到,组件的挂载指的是将组件 ...
- 从 React 的组件更新谈 Immutable 的应用
在介绍 Immutable 如何在 React 中应用之前,先来谈谈 React 组件是如何更新的. React 是基于状态驱动的开发,可以将一个组件看成是一个有限状态机,组件要更新,必须更新状态. ...
随机推荐
- python 中 list 的各项操作
最近在学习 python 语言.大致学习了 python 的基础语法.觉得 python 在数据处理中的地位和它的 list 操作密不可分. 特学习了相关的基础操作并在这里做下笔记. ''' Pyth ...
- OC-UICollectionView实现瀑布流
UICollectionView实现瀑布流 在iOS中可以实现瀑布流的目前已知的有2种方案: 使用UIScrollView自己封装一套,这种方案是应用于iOS6之前的,因为iOS6才出来UIColle ...
- Hello BlogsPark
2017年8月4日, 今天是使用博客园的第一天, 签个到. NSLog(@"Hello BlogsPark");
- java中List Array相互转换
List to Array List 提供了toArray的接口,所以可以直接调用,转为object型数组 List<String> list = new ArrayList<Str ...
- 解决火狐中用JQUERY .removeAttr()无法去除元素属性的方法
//为元素添加只读属性 $("#test").attr("readonly","readonly") //去除元素的只读属性 $(" ...
- mac制作icns图标
Key steps:1) Prepare a 1024x1024 png or jpeg file;2) Download fasticns utility to convert the icon t ...
- Redis和消息队列使用实战
消息队列是在乐视这边非常普遍使用的技术.在我们部门内部,不同的项目使用的消息队列实现也不一样.下面是支付系统的流转图(部门兄弟画的,借用一下): 从图中可以看到,里面用到了kafka消息队列.作用是做 ...
- java‘小秘密’系列(一)---String、StringBuffer、StringBuilder
java'小秘密'系列(一)---String.StringBuffer.StringBuilder 前言:本系列的主题是平时容易疏忽的知识点,只有基础扎实,在编码的时候才能更注重规范和性能,在出现b ...
- async简单使用
node的异步io虽然好用,但是控制异步流程确实一个比较麻烦的事情,比如在爬虫中控制并发数量,避免并发过大导致网站宕机或被加入黑名单.因此需要一个工具来控制并发,这个工具可以自己写或者使用async( ...
- Java中Lock,tryLock,lockInterruptibly的区别
转载自:https://www.zhihu.com/question/36771163/answer/68974735 ReentrantLock 锁有好几种,除了常用的lock ,tryLock , ...