看100遍不如自己写一遍,最近参考网上一个Todo例子写了一个Todo应用,顺便适配了移动端,发现了一系列问题 我自己的例子demo http://115.28.147.237:2223/demo1/
props
每一个组件都有可变与不可变的属性,props就是不可变的属性,当props改变时,组件的绘制方法不会被调用。
states
当setState时会重新渲染render
states就是组件的可变属性,states的改变会触发组件的render函数,react与其他mvvm框架的最大的不同点就是,react组件可以想象成一个状态机,状态的改变会重绘UI,然后根据 dom diff 算法来绘制UI,而其他的mvvm框架则是对js对象的dirty
我们在设计React组件时如何灵活的运用props与state是一个非常关键的要点。
refs
refs这个点主要用在上级组件调用下级组件的场景,这个场景非常多见。
React.findDOMNode(this.refs.deleteBtn).style.visibility = "visible";
componentDidMount
组件UI渲染完毕后调用,常用在这种业务场景:调用ajax获得数据后,渲染UI。
各种坑
触摸事件
React中的触摸事件仅用三种,touchstart, touchend, touchmove,可是这种会有问题,有时候我需要滚动页面的时候,很容易触发某一个元素的touchend事件,为此笔者找了一个React第三方组件,React-tappable。
还无意中发现一个Android与iOS的不同之处
input在disable且readonly之后,onClick会在iOS上触发不起来,onTouchEnd又会在Android上把键盘弹出来,这边笔者做了个Hack,iOS下用onTouchEnd,Android下用onClick,就正常了。