react的变形(React中的不可变数据Immutability)
本文目录
React中的不可变数据Immutability
1、直接更改变量; 2、建立所需修改变量的副本,进行修改后替换原数据。
1、可以帮助我们增强组件和整体应用性能。 2、更简单的撤消/重做和步骤重现 3、不可变数据(Immutability)还使一些复杂的功能更容易实现。避免数据改变,使我们能够保留对旧数据的引用,如果我们需要在它们之间切换。 4、追踪变更(Tracking Changes) 确定可变对象是否已更改是复杂的,因为直接对对象进行更改。这样就需要将当前对象与先前的副本进行比较,遍历整个对象树,并比较每个变量和值。这个过程可能变得越来越复杂。确定不可变对象如何改变是非常容易的。如果被引用的对象与之前不同,那么对象已经改变了。仅此而已。 5、确定何时重新渲染(Determining When to Re-render in React) React 中不可变数据最大好处在于当您构建简单的 纯(pure)组件 时。由于不可变数据可以更容易地确定是否已经进行了更改,这也有助于确定组件何时需要重新渲染。 与 shouldComponentUpdate() 相关。
1、slice()方法可以返回一个数据的副本
React解决了前端开发中的哪些痛点
组件化:React 天生组件化,这是 React 的核心,除了能够在团队内部积累业务组件以外,也能找到众多开源组件的实现模块化:基于 webpack 可以使用 Es6 或 CommonJs 的写法实现模块化代码开发效率:React 的代码基本就是组件的组合,分而治之的方式让代码的可阅读性很高,容易理解。 而且相比于 MVC 几乎是去除了 Controller 的角色,只用关心一个 render 函数,不用关系视图局部的修改。运行效率:React 实现了 Virtual DOM ,相比于 MVVM 框架具有更优的效率可维护性:React 基于 flux 或 redux 的架构设计,确定性的 store 很容易定位问题,无论是新增业务代码还是查找业务 bug 都不再是难题
vue和react的区别之我见
react和vue都是做组件化的,整体的功能都类似,但是他们的设计思路是有很多不同的。使用react和vue,主要是理解他们的设计思路的不同。 react整体是函数式的思想,把组件设计成纯组件,状态和逻辑通过参数传入,所以在react中,是单向数据流,推崇结合immutable来实现数据不可变。react在setState之后会重新走渲染的流程,如果shouldComponentUpdate返回的是true,就继续渲染,如果返回了false,就不会重新渲染,PureComponent就是重写了shouldComponentUpdate,然后在里面作了props和state的浅层对比。 而vue的思想是响应式的,也就是基于是数据可变的,通过对每一个属性建立Watcher来监听,当属性变化的时候,响应式的更新对应的虚拟dom。 总之,react的性能优化需要手动去做,而vue的性能优化是自动的,但是vue的响应式机制也有问题,就是当state特别多的时候,Watcher也会很多,会导致卡顿,所以大型应用(状态特别多的)一般用react,更加可控。 react的思路是all in js,通过js来生成html,所以设计了jsx,还有通过js来操作css,社区的styled-component、jss等, vue是把html,css,js组合到一起,用各自的处理方式,vue有单文件组件,可以把html、css、js写到一个文件中,html提供了模板引擎来处理。 react是类式的写法,api很少, 而vue是声明式的写法,通过传入各种options,api和参数都很多。所以react结合typescript更容易一起写,vue稍微复杂。 react可以通过高阶组件(Higher Order Components--HOC)来扩展,而vue需要通过mixins来扩展 一个react高阶组件的例子:react做的事情很少,很多都交给社区去做,vue很多东西都是内置的,写起来确实方便一些, 比如 redux的combineReducer就对应vuex的modules, 比如reselect就对应vuex的getter和vue组件的computed, vuex的mutation是直接改变的原始数据,而redux的reducer是返回一个全新的state,所以redux结合immutable来优化性能,vue不需要。 上面主要梳理了react和vue的4点不同: (其中第3点在vue3.0支持类式写法之后就可以去掉了) react整体的思路就是函数式,所以推崇纯组件,数据不可变,单向数据流,当然需要双向的地方也可以做到,比如结合redux-form,而vue是基于可变数据的,支持双向绑定。react组件的扩展一般是通过高阶组件,而vue组件会使用mixin。vue内置了很多功能,而react做的很少,很多都是由社区来完成的,vue追求的是开发的简单,而react更在乎方式是否正确。
杂记2:React的亮点
React是划时代的开发工具。
更彻底的组件化 组件化意味着:
单向数据流 在React中,你操作的是数据。React根据你的数据变动来渲染出新的内容。数据就是数据,渲染就是渲染。避免了MVC中view部分又去直接修改model。具体实现运用了Redux、纯函数、高阶组件。
虚拟DOM 对于三大框架 React、Angular和Vue这不算很稀奇的事情。只是对比jQuery有优势。
颠覆传统的前端开发 意味着开发者要学习一些新的开发范式。比如传统前端遵循html/css/js分离,而React因为组件化,所以都使用JSX把html写在了JavaScript中。Vue号称自己的侵入性比 React 和 Angular 小,而且仍然保留 html/css/js 分离,且可以使用 ES5 语法(不强制使用ES6)。
学习曲线陡峭 React自带的JSX、ES6语法、组件化、单向数据流、Redux、jest/enzyme测试。
关于框架的选择,仍然是那句话:萝卜白菜各有所爱,适合自己的就是最好的。然而前端正在进行一场革命,从2015年/2016年来看特别明显。React可能不是这场前端革命的终点(也许三大框架都不是),但是React带来的新的开发思路,值得去了解。
更多文章:
对象马甲号是究极boss(叶修搞无敌最俊朗这个马甲的原本目的是什么)
2024年7月22日 16:43
html5代码规范(网页前端里面的HtmL的3个主要规范是什么)
2024年9月1日 16:35
decimal函数怎么用(decimal(6,2)是什么意思)
2024年7月23日 22:17
variant是什么数据类型(vb variant类型问题)
2024年8月3日 17:25
css表格属性(css中表格的cellspacing和cellpading和单元格的属性问题)
2024年7月24日 02:34
javase网络编程重要嘛(请问一下 学习javaweb 要先学 javase吗)
2024年7月24日 10:59
oracle vm virtualbox不能为虚拟电脑打开一个新任务(VirtualBox 不能为虚拟电脑打开一个新任务)
2024年7月16日 10:14
exec是什么命令(【exec】shell脚本中的 exec 命令)
2024年7月3日 05:31
fail和pass的区别(美国大学的Pass/Fail到底是怎么回事)
2024年6月27日 06:43
consultancy是什么意思(consulting是什么意思)
2024年6月8日 10:47
外网访问内网web服务器(请问在校园网内搭建的web服务器,外网怎么才能访问进来)
2024年9月1日 23:35