Javascript

使用react开发的优秀实践

November 15, 2017
Web, Javascript, React

如果想用react开发功能丰富,易于代码管理,易于扩展维护的项目,我们最好使用react的一整个体系。当然你单独使用react的部分也是可以的,写一些简单的应用也非常方便,没有必要把这个体系用上。 这篇文章作为入门的一篇略深一些的介绍,在全面学习之前我们至少要知道我们学的每个部分是做什么,为什么要在这里用这个。所以本文不讲一些代码的细节,而是从整体上把握这个技术栈,帮助你快速理解整个体系。 总结 # 一个比较好的实践是使用: react + redux + router, 来实现复杂的应用。 其中, react 承担了前端渲染控制的功能,redux承担了数据流转的控制功能,router则实现了路由控制的功能。 这三项,基本上可以保证我们做出的项目,结构清晰,易于维护。 在初学这写东西的时候,可能会觉得比较痛苦,因为你需要记住太多的东西和条条框框来开发,这好像限制了你的自由发挥,但是对于一个大型应用来说,或者即便是小应用,没有清晰的结构,就连你自己可能都看不懂自己的代码,后期维护的时候就基本上没有多少好体验了。 真正优秀的作品,都是在严格的限制下完成的,因为人的思维不应该去思考那些复杂的页面组成的逻辑关系,而是在实现自己的业务逻辑和计算算法上,那些结构,按照一个科学的方式来做就好。而react正是提供了这样一个科学的流程和方式。 react # 总的来说,在前端渲染方面,react非常出众, 一般我们将前端渲染的部分交给react来做。 react使用虚拟DOM的方式,来管理渲染。并且将一个页面分成多个组件进行管理,我们一般将组件按功能分开。当页面发生变化的时候,由react来决定哪里需要渲染,哪里不动,react来操纵浏览器的渲染。 与jQuery相比,更进一步, jQuery是将浏览器的一些操作封装出来,提供一组新的调用函数。但是react已经将浏览器的相关接口完全封装,并且屏蔽在react内部,提供了一种更自然和智能的方式来满足我们的需求。我们直接和react打交道,剩余的事情由react去和浏览器做。 react这个框架可以运行在浏览器端,也可以运行在服务器端, 我们称之为Universal渲染,这里的服务器端,就是Nodejs的平台了。我用的基本上都是浏览器端运行。只要将react的脚本发送到浏览器进行执行就可以了。 初的渲染是后端的事情,有了ajax后前端也可以进行渲染了。但是前端渲染会有个问题,就是搜索引擎不友好,因为搜索引擎并不会去跟js代码交互,只会爬取静态页面,所以使用后端渲染十分重要。这关乎你的网站被检索到的可能性。 基本构造 # react的逻辑很简单,一切都是组件。一个页面是由多个组件堆砌而成,每个组件之间互相隔离,仅通过数据交互,而数据交互的接口是固定的。所以对于一个组件内部来说,与外界是完全隔离的。 一个组件包括,样式和数据。数据我们通过请求服务器去获得。 每个组件通过提供一个render函数来返回这个组件,这个render函数只能返回一个元素。如果有多个元素需要被包起来成为一个元素返回。 组件之间可以是嵌套关系,这个和类的概念有点像,在一个类中可以包含另一个类作为自己的成员。也就是方便我们做组件封装,功能划分。 当我们写完一个react应用后,可以通过npm start的方式启动起来,当我们在浏览器访问对应的地址时,默认访问index.js, 所以我们的应用最终在这里组织起来。 ES6 & Javascript & JSX # 在写应用的时候,我们使用JSX 语法来写,JSX以ES6为基础,react提供了JSX解释器。在写完以后,JSX语法的代码会被编译成JS代码,最终在浏览器中运行的是Javascript的代码,关于webpack等工具,我暂时没有去学习,因为react提供了一个创建react应用的脚本,能够一键创建好这些配置文件,所以我就暂时直接使用了。 npm install --global create-react-app 这个命令就可以安装这个脚本,然后我们执行: create-react-app myapp, 就可以创建一个文件夹, 里面已经配置了一个简单的react应用。 然后我们进入这个文件夹,使用npm start就可以启动服务。 start的过程中,代码就会被编译,并打包成webpack中配置的打包形式。 如果此时我们改变代码,这个页面会动态更新。 react 原生的数据控制 # 在react中,数据主要有三个载体,分别是state、prop、context。其中state是组件内部状态数据,prop用于层层传递,context可以跨层传递。 react要实现各个组件独立,并且具有统一的结构,最重要的就是控制数据。在JS这种弱类型的语言中,这一点很好实现,重点就是设计一个接口形式。 react中的组件,都有两个变量,一个是prop, 一个是state。 其中,state是描述组件内部数据的,prop是对外的接口。也就是说,别人传过来的数据,会存在prop中。同时,prop是不可变的,组件自己不能更改prop的值, 只能改变state的值。 这种数据控制的方式,比较原始,从接口统一的角度来看挺好的,也符合基本的思维方式。 但是这种控制方式也存在很多问题,不用去深究这个框架的细节,我们也可以提出很多问题: 每个组件之间的数据冗余问题,很多数据统计的模块,该怎么存储数据? 复制一份出来?当要更改数据的时候,是不是还要传参给另一个组件通知他改变数据? ...

react 初探-一些基础概念

July 31, 2017
Web, Javascript

(这一篇写的很杂,因为自己也是没有章法的断断续续的看了react的东西,所以内容没有组织好。勉强有个认知就好了) 前端的技术现在发展的其实相对简单了很多,但是我觉得这才是正常的前端,以前的前端发展的太混乱,光是屏幕适配的问题就要搞出很多的工作量。而且以前的前后端的耦合过大,使得前端想发展也不发展不动,不过设计总是在进步,异步请求的普适催生了新的前后端设计模式,使得前后端完全解耦成为可能,前端的事情在前端搞定,后台的事情在后台封装掉。前端发展到今天主要就是接下来我要学习的几个js的框架,利用js实现动态的数据绑定,以及异步的请求,所有的前端操作都在封装在前端,开发的脑智压力开始下降,所以现在的全栈也并不是太难。 这样前端框架会用的人一般都比较多,因为学习栈比较浅,很多人自学一天就可以了。所以相对的资料也就非常完善,网上的学习教程编写教学例子也很方便,所以在这里我主要就是偏理论一些的认知,其背后的设计实现等。 简介 # React是Facebook出品的一款开源框架,虽说是开源,但是其在标准的BSD协议后添加了一些条款,使得现在很多公司并不敢使用这个框架了,其添加条款中说明,如果使用该开源项目的产品威胁到facebook的商业产品,facebook有权起诉该产品。不过没有并那么可怕,因为貌似想威胁到也不太容易。 React这类框架主要的注意力放在的是用户的交互界面上,最突出的就是内容的动态绑定,内容变化后的高效刷新。并且屏蔽了DOM。 React使用的是JSX语法,是一种将js与html混合编写的语言。 Javascript # 在学习使用这个框架之前,必须对Javascript有所了解,因为这是一个Javascript框架。对于这部分了解的就直接跳过去看JSX的语法部分。 这门语言传说是被人误解最深的语言,确实貌似大家的学习路线都没有关注过这个东西,以为就是前端脚本搞着玩的语言,但是其语言还是有很多优点并且应用的场景正越来越多。 JavaScript 是一种面向对象的动态语言,它的语法来源于 Java 和 C,所以这两种语言的许多语法特性同样适用于 JavaScript。需要注意的一个主要区别是 JavaScript 不支持类,类这一概念在 JavaScript 通过对象原型(object prototype)得到延续。另一个主要区别是 JavaScript 中的函数也是对象,JavaScript 允许函数在包含可执行代码的同时,能像其他对象一样被传递。 类型 # Number(数字) String(字符串) Boolean(布尔) Symbol(符号)(第六版新增) Object(对象) Function(函数) Array(数组) Date(日期) RegExp(正则表达式) Null(空) Undefined(未定义) 等 更多基础的语法不冗余重复了。 Javascript对象 # 如果你知道Json的全称,你就理解了这个东西:JSON(JavaScript Object Notation, JS 对象标记)。一个符合Json协议的字符串可以直接解析为Javascript对象。 对于Object的成员访问可以使用链式访问: var obj = { name: "Carrot", "for": "Max", details: { color: "orange", size: 12 } } obj.details.color; // orange obj["details"]["size"]; // 12 下面的例子创建了一个对象原型,Person,和这个原型的实例,You。 ...