React Native开发之快速入门React
前言这篇文章,是接着之前的一篇入门文章写的(虽然已经过去大半年了),本文的受众仍然是React小白,熟悉React的同学可以不看了。上一篇文章链接:
上一篇文章主要介绍了JS的语言基础和React的component生命周期。本文会接着上一篇文章,继续讲解React的基础。 本文的React Native版本是0.0.40,开发IDE是Atom+Nuclide,IDE环境搭建可以参考我的这一篇文章。
如果你有足够的时间,非常建议看看React的官方Getting start文档。 准备工作初始化一个RN的工程, react-native init ReactBasics
然后,在iOS模拟器(安卓也可以)上运行这个工程。 react-native run-ios
本文所有的代码修改都在 默认的ReactBasics代码是这样子的 //...
export default class ReactBasics extends Component {
render() {
return (
<View style={styles.container}>
<Text style={styles.welcome}>
Welcome to React Native!
</Text>
<Text style={styles.instructions}>
To get started,edit index.android.js
</Text>
<Text style={styles.instructions}>
Double tap R on your keyboard to reload,{'n'}
Shake or press menu button for dev menu
</Text>
</View>
);
}
}
//...
我们修改为这样 export default class ReactBasics extends Component {
render() {
return (
<View style={styles.container}>
<Text style={styles.welcome}>
Let us learn React.
</Text>
</View>
);
}
}
然后,运行模拟器 react-native run-ios
看到的如下截图: React是啥?React是一个Javascript框架,用来开发web应用。Web应用开发中,比较流行的有三个框架:
从名字上,就能看到React Native是基于React(都是Facebook出品)。React的设计思想是:
JSX
render() {
return (
<View style={styles.container}>
<Text style={styles.welcome}>
Let us learn React.
</Text>
</View>
);
}
其中 <Text style={styles.welcome}>
Let us learn React.
</Text>
会被编译成 React.createElement(
Text,{style: styles.welcome},'Let us learn React.' )
注意,使用JSX,一定要在scope中,能够访问到React和对应的Element。比如刚刚的例子,在代码的最上面看到了这样的import import React,{ Component } from 'react';
import {
//...
Text,} from 'react-native';
另外,JSX编译结果可以在线查看在线查看
如果你个Tag是空的,可以用 <CustomComponent style={styles.welcome}/>
大小写JSX对大小写开头是敏感的
所以,自定义的Components必须是大写字母开头的。 举个例子: <text style={styles.welcome}>
Let us learn React.
</text>
会被编译成为 React.createElement(
"text",{style: styles.welcome},'Let us learn React.'
)
React在解析的时候,会认为这和 JS代码JSX中的JS表达式要用大括号 比如,你可以这么写 <Text style={styles.welcome}>
{"Let" + " us" + " learn" + " react"}
</Text>
点击Save,然后选中模拟器,command+R进行reload,仍然能够正常显示。 Children这是本文最初的代码 <View style={styles.container}>
<Text style={styles.welcome}>
Let us learn react
</Text>
</View>
可以看到,在JSX中可以嵌套Element形成一种层次结构。这种层次结构可以动态生成,比如 render() {
var textElement = <Text style={styles.welcome}>Let us learn react</Text>
return (
<View style={styles.container}>
{textElement}
</View>
);
}
JSX更多的学习资料,方便想要深入学习的同学:
ElementElement是你在屏幕上想要看到的东西,在React中,一个element就是一个对象。
聪明的你可能会问,这样效率不是很低吗?
React强调函数式编程,不可变状态是函数式编程的核心思想之一。不可变状态能够让你的代码更容易编写,测试和维护。一个不可变的函数,在输入一定的时候,输出一定是一样的。 Component在React native开发中, React native中,我们通常采用ES6 class来定义一个Component。 比如上文的代码: export default class ReactBasics extends Component {
render(){
//..
}
}
其中,render是实际的渲染函数。通常,使用JSX来返回想要看到的视图。 React Native中的Component都是原生的Component,通过JS bridge来调用原生的Component来渲染。 这些Component分为两种:
State/propsReact的Component有两个内置参数对象
初始化比如,我们对本文的代码进行修改,新建一个Component class GreatingComponent extends Component{
render(){
return (
<Text style={styles.welcome}>
Greating from {this.props.name}
</Text>
);
}
}
这个Component非常简单:读取 然后,我们使用这个Component,将 export default class ReactBasics extends Component {
render() {
return (
<View style={styles.container}>
<GreatingComponent name={"Leo"}/>
</View>
);
}
}
然后保存文件,选择模拟器,command+R,重新加载。看到的界面如下: 通过这个例子,如何对Component初始化进行传值已经很清楚了
修改视图状态
我们继续修改代码,添加一个构造函数,对state进行初始化,然后 在最上面的import中,添加一个 export default class ReactBasics extends Component {
constructor(props) {
super(props);
this.state = {name:"Tom"}
}
_onPressText(){
this.setState({name:"Jack"});
}
render() {
return (
<View style={styles.container}>
<TouchableOpacity onPress={()=>this._onPressText()}>
<GreatingComponent name={this.state.name}/>
</TouchableOpacity>
</View>
);
}
}
然后,保存,reload模拟器。点击下文字,效果如下。
|