第一章 react新的前端思维方式——《深入浅出React和Redux》读书笔记
第1章 React新的前端思维方式
通过对React快速入手,我们会解析React的工作原理,并通过与功能相同的jQuery程序对比,从而看出React的特点。
在这一章中,我们会介绍:
如何初始化一个React项目;
如何创建一个React组件;
React的工作方式。
1.1 初始化一个React项目
1.1.1 create-react-app工具
使用create-react-app创建项目
1.2 增加一个新的React组件
React的首要思想是通过组件(Component)来开发应用。所谓组件,简单说,指的是能完成某个特定功能的独立的、可重用的代码。基于组件的应用开发是广泛使用的软件开发模式,用分而治之的方法,把一个大的应用分解成若干小的组件,每个组件只关注于某个小范围的特定功能,但是把组件组合起来,就能够构成一个功能庞大的应用。如果分解功能的过程足够巧妙,那么每个组件可以在不同场景下重用,那样不光可以构建庞大的应用,还可以构建出灵活的应用。
React非常适合构建用户交互组件。
1.2.1 JSX
1.2.2 JSX是进步还是倒退
我们在JSX中看到一个组件使用了onClick,但并没有产生直接使用onclick(注意是onclick不是onClick)的HTML,而是使用了事件委托(event delegation)的方式处理点击事件,无论有多少个onClick出现,其实最后都只在DOM树上添加了一个事件处理函数,挂在最顶层的DOM节点上。所有的点击事件都被这个事件处理函数捕获,然后根据具体组件分配给特定函数,使用事件委托的性能当然要比为每个onClick都挂载一个事件处理函数要高。
因为React控制了组件的生命周期,在unmount的时候自然能够清除相关的所有事件处理函数,内存泄露也不再是一个问题。
React的组件可以把JavaScript、HTML和CSS的功能在一个文件中,实现真正的组件封装。
1.3 分解React应用
React应用实际上依赖于一个很大很复杂的技术栈,我们使用create-react-app避免在一开始就费太多精力配置技术栈。
eject(弹射)命令做的事情,就是把潜藏在react-scripts中的一系列技术栈配置都“弹射”到应用的顶层,然后我们就可以研究这些配置细节了,而且可以更灵活地定制应用的配置。
1.4 React的工作方式
1.4.1 jQuery如何工作
选中一些DOM元素,然后对这些元素做一些操作,这是一种最容易理解的开发模式。jQuery的发明人John Resig就是发现了网页应用开发者的这个编程模式,才创造出了jQuery,其一问世就得到普遍认可,因为这种模式直观易懂。但是,对于庞大的项目,这种模式会造成代码结构复杂,难以维护,每个jQuery的使用者都会有这种体会。
1.4.2 React的理念
React的工作方式把开发者从繁琐的操作中解放出来,开发者只需要着重“我想要显示什么”,而不用操心“怎样去做”。
React的理念,归结为一个公式,就像下面这样:
UI=render(data)
让我们来看看这个公式表达的含义,用户看到的界面(UI),应该是一个函数(在这里叫render)的执行结果,只接受数据(data)作为参数。这个函数是一个纯函数,所谓纯函数,指的是没有任何副作用,输出完全依赖于输入的函数,两次函数调用如果输入相同,得到的结果也绝对相同。如此一来,最终的用户界面,在render函数确定的情况下完全取决于输入数据。
对于开发者来说,重要的是区分开哪些属于data,哪些属于render,想要更新用户界面,要做的就是更新data,用户界面自然会做出响应,所以React实践的也是“响应式编程”(ReactiveProgramming)的思想,这也就是React为什么叫做React的原因。
1.4.3 Virtual DOM
React利用Virtual DOM,让每次渲染都只重新渲染最少的DOM元素。
Web前端开发关于性能优化有一个原则:尽量减少DOM操作。虽然DOM操作也只是一些简单的JavaScript语句,但是DOM操作会引起浏览器对网页进行重新布局,重新绘制,这就是一个比JavaScript语句执行慢很多的过程。
1.4.4 React工作方式的优点
jQuery的方式直观易懂,对于初学者十分适用,但是当项目逐渐变得庞大时,用jQuery写出的代码往往互相纠缠,形成类似图1-4的状况,难以维护。
图1-4 jQuery方式造成的纠缠代码结构
使用React的方式,就可以避免构建这样复杂的程序结构,无论何种事件,引发的都是React组件的重新渲染,至于如何只修改必要的DOM部分,则完全交给React去操作,开发者并不需要关心,程序的流程简化为图1-5的样式。React利用函数式编程的思维来解决用户界面渲染的问题,最大的优势是开发者的效率会大大提高,开发出来的代码可维护性和可阅读性也大大增强。
图1-5 React的程序流程
React等于强制所有组件都按照这种由数据驱动渲染的模式来工作,无论应用的规模多大,都能让程序处于可控范围内。
1.5 本章小结
在这一章里,我们用create-react-app创造了一个简单的Re-act应用,在一开始,我们就按照组件的思想来开发应用,React的主要理念之一就是基于组件来开发应用。
通过和同样功能的jQuery实现方式对比,我们了解了React的工作方式,React利用声明式的语法,让开发者专注于描述用户界面“显示成什么样子”,而不是重复思考“如何去显示”,这样可以大大提高开发效率,也让代码更加容易管理。
虽然React是通过重复渲染来实现动态更新效果,但是借助Virtual DOM技术,实际上这个过程并不牵涉太多的DOM操作,所以渲染效率很高。
理解React的工作方式,是踏入React世界的关键一步,接下来我们详细介绍如何构建高质量的React组件。