对于JS而言,一切皆对象,函数也是对象 性能:RN的表现比原生弱一些,但是远好于H5 运行机制:JS代码的最终运行是通过一层封装,把JS的代码映射成原生代码,而界面上的元素最终使用的也是原生的组件,而不是自己渲染
Component:生命周期:
- 初始化: getDefaultProps:设置默认的props getInitialState:定义this.state,此时可以访问this.props componentWillMount:组件初始化时调用,此时可以修改state render:创建虚拟dom,进行diff算法,更新dom。此时不能修改state componentDidMount:组件第一次渲染完成之后调用
- 运行中: componentWillReceiveProps:在组件接受新的props时调用 shouldComponentUpdate:返回一个bool值,在接受新的props和state时调用,用来判断是否需要刷新。初始化不调用 componentWillUpdata:在组件接受新的props和state时但还没render时调用。初始化不调用 componentDidUpdate:在组件更新完成之后调用。
- 卸载: componentWillUnmount:在组件从dom中移除时调用
state和props
React 把组件看成是一个状态机(State Machines)。通过与用户的交互,实现不同状态,然后渲染 UI,让用户界面和数据保持一致。只需更新组件的 state,然后根据新的 state 重新渲染用户界面(不要操作 DOM)
组件在创建时就可以使用各种参数来进行定制。用于定制的这些参数就称为props(属性)props是在父组件中指定,而且一经指定,在被指定的组件的生命周期中则不再改变。 对于需要改变的数据,我们需要使用state
React Refs 用来绑定到 render() 输出的组件,允许引用 render() 返回的相应的支撑实例( backing instance )。这样就可以确保在任何时间总是拿到正确的实例。ref 属性的值可以是一个字符串也可以是一个函数。 使用方法:
<input ref="myInput" />
var input = this.refs.myInput;
var inputValue = input.value;
var inputRect = input.getBoundingClientRect();