QAP 应用使用开源的 Rax 渲染引擎渲染页面,Rax 语法 + 生命周期,以下简要介绍 Rax 与相关语法。
import { createElement, render, Component } from 'rax'; import {Text} from 'nuke'; class Demo extends Component { render() { return <Text>Hi QAP~</Text>; } } render(<Demo />);
render(<Demo />
是将 <Demo />
这个组件渲染到了客户端容器的根节点,此时我们称<Demo />
为一个页面,或者一个根组件。
import {createElement, Component,render} from 'rax'; import { Text} from 'nuke'; class TextDemo extends Component { constructor() { super(); this.state = { num: 0 } } render(){ return ( <Text style={styles.container}>{this.state.num}</Text> ) } }
{ this.state.imageList.map((item,index)=>{ return (<Image style={styles.pic} source={{ uri : item.url }}></Image>) }) }
import {createElement, Component,render} from 'rax'; import {View, ListView} from 'nuke'; class ListViewDemo extends Component { constructor() { super(); this.state = { loaded: false } } render(){ const {loaded } = this.state; return ( <View style={styles.container}> { loaded ? <ListView renderRow={this.renderItem} dataSource={this.state.imgList} style={styles.list} /> : null } </View> ) } }
大家都知道,
Rax 与 React 语法相近,生命周期函数相同。
> 组件免不了要与用户互动,React 的一大创新,就是将组件看成是一个状态机,一开始有一个初始状态,然后用户互动,导致状态变化,从而触发重新渲染 UI。来自:阮老师的 React 系列
我们把组件创建、变化、销毁看做组件的生命周期。
生命周期枚举如下 :
以 MyButton 为例,在项目中创建 yourproject/src/components/my-button/index.jsx
import { createElement, Component,render } from 'rax'; import { Touchable ,Text } from 'nuke'; class Demo extends Component { constructor(props){ super(props); } render() { const {text, onPress } = this.props; return ( <Touchable style={{...}} onPress={(e)=>{onPress && onPress(e) }}> <Text>{text}</Text> </Touchable> ); } } render(<Demo />);
yourproject/src/pages/index/index.jsx
/* @jsx createElement */ import { createElement, Component,render } from 'rax'; import MyButton from '../../components/my-button'; import { View,Text, Modal} from 'nuke'; class Index extends Component{ pressEvent = (e) => { Modal.alert('hello QAP'); } render(){ return (<View> <Text>...其他部分省略</Text> <MyButton onPress={this.pressEvent}>请点我</MyButton> </View> ); } } render(<Index />);