前端之家收集整理的这篇文章主要介绍了
React.js 要点,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_
502_0@这是我的原创
文章,原始地址:
http://lpgray.me/article/50/
@H_
502_0@
@H_
502_0@最近在公司的一个移动端WEB产品中使用了React这个框架(并不是React-Native),记录一下在开发过程中遇到的各种问题以及对应的
解决方法,希望能对读者有所帮助。
React原则
@H_
502_0@React不多做介绍,就是Facebook的一个开源JS框架,专注的层面为View层,不
包括数据访问层或者那种Hash路由(不过React有
插件支持),与Angularjs,Emberjs等大而全的框架不同,React专注的中心是Component,即组件,React认为一切
页面元素都可以抽象成组件,比如一个表单,或者表单中的某一项。
常用技术要点
props
@H_
502_0@每一个组件都有可变与不可变的
属性,props就是不可变的
属性,当props改变时,组件的绘制
方法不会被
调用。
states
@H_
502_0@states就是组件的可变
属性,states的改变会触发组件的render
函数,react与其他mvvm框架的最大的不同点就是,react组件可以想象成一个状态机,状态的改变会重绘UI,然后根据 dom diff 算法来绘制UI,而其他的mvvm框架则是对js对象的dirty check(Angularjs)或者defineProperty时指定的回调
函数(Emberjs),因此,状态机制与dom diff的存在声称React更快。
@H_502_0@我们在设计React组件时如何灵活的运用props与state是一个非常关键的要点。
refs
@H_
502_0@refs这个点主要用在上级组件
调用下级组件的场景,这个场景非常多见。
componentDidMount
@H_
502_0@组件UI渲染完毕后
调用,常用在这种业务场景:
调用ajax获得数据后,渲染UI。
state的改变会触发render
@H_
502_0@正如上文中所说,React组件是一个一个状态机,state的改变会改变状态,会触发重绘,对于state的设计是对React组件设计的关键。
各种坑
触摸事件
@H_
502_0@React中的触摸事件仅用三种,touchstart,touchend,touchend,可是这种会有问题,有时候我需要滚动
页面的时候,很容易触发某一个元素的touchend事件,为此笔者找了一个React第三方组件,
React-tappable。
还无意中发现一个Android与iOS的不同之处
@H_
502_0@input在disable且readonly之后,onClick会在iOS上触发不起来,onTouchEnd又会在Android上把
键盘弹出来,这边笔者做了个Hack,iOS下用onTouchEnd,Android下用onClick,就正常了。
高级技术要点
mixin
@H_
502_0@曾经跟一个朋友讨论,封装utils模块为纯js模块好还是React式的模块好的问题,他给我了一个概念,
React mixin,本来自己在开发中确实写了很多可复用的小组件,但由于没有过多的了解React周边的相关知识,因此忽略了
React mixin,笔者认为以后可以探究一下这个技术点。