You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<TextInputstyle={{height: 40}}placeholder="Type here to translate!"onChangeText={(text)=>this.setState({ text })}/><TextInput// style={{ height: 40 }}placeholder="Type here to translate!"onChangeText={this.onChangeText.bind(this)}/>// jsonChangeText(text){console.log(text)this.setState({ text })}
导航
在你的React Native项目中安装react-navigation这个包
yarn add react-navigation
# or with npm# npm install --save react-navigation
然后,安装react-native-gesture-handler
yarn add react-native-gesture-handler
# or with npm# npm install --save react-native-gesture-handler
Link所有的原生依赖,这一步是必须的,之前漏了这一步在这里花费了很多时间
react-native link react-native-gesture-handler
# or
react-native link
在App.js中把代码替换为下面这些
importReact,{Component}from'react';import{Text,View,Button}from'react-native';import{createAppContainer,createStackNavigator,StackActions,NavigationActions}from'react-navigation';// Version can be specified in package.jsonclassHomeScreenextendsComponent{render(){return(<Viewstyle={{flex: 1,alignItems: 'center',justifyContent: 'center'}}><Text>Home Screen</Text><Buttontitle="Go to Details"onPress={()=>{this.props.navigation.dispatch(StackActions.reset({index: 0,actions: [NavigationActions.navigate({routeName: 'Details'})],}))}}/></View>);}}classDetailsScreenextendsComponent{render(){return(<Viewstyle={{flex: 1,alignItems: 'center',justifyContent: 'center'}}><Text>Details Screen</Text></View>);}}constAppNavigator=createStackNavigator({Home: {screen: HomeScreen,},Details: {screen: DetailsScreen,},},{initialRouteName: 'Home',});exportdefaultcreateAppContainer(AppNavigator);
导航跳转
<Buttontitle="Go to Home"onPress={()=>this.props.navigation.navigate('Home')}/>
将路由页面封装模块化封装进组件里面
import{createAppContainer,createStackNavigator}from'react-navigation';// Version can be specified in package.jsonimportDetailsScreenfrom'./src/components/DetailsScreen/DetailsScreen'importHomeScreenfrom'./src/components/HomeScreen/HomeScreen'constAppNavigator=createStackNavigator({Home: {screen: HomeScreen,},Details: {screen: DetailsScreen,},},{initialRouteName: 'Home',});exportdefaultcreateAppContainer(AppNavigator);
classLogoTitleextendsReact.Component{render(){return(<Imagesource={require('../../assets/spiro.png')}style={{width: 30,height: 30}}/>);}}exportdefaultclassDetailsScreenextendsComponent{staticnavigationOptions={title: 'Detail',headerTitle: <LogoTitle/>,headerRight: (<Buttontitle="菜单"onPress={()=>alert('This is a button!')}title="Info"color="#58bc58"/>),};// other code}
底部导航条
import{createAppContainer,createStackNavigator,createBottomTabNavigator}from'react-navigation';// Version can be specified in package.jsonimportDetailsScreenfrom'./src/components/DetailsScreen/DetailsScreen'importHomeScreenfrom'./src/components/HomeScreen/HomeScreen'importMineScreenfrom'./src/components/MineScreen/MineScreen'constMineNavigator=createStackNavigator({Mine: {screen: MineScreen,},Details: {screen: DetailsScreen,},},{initialRouteName: 'Mine',});constHomeNavigator=createStackNavigator({Home: {screen: HomeScreen,},Details: {screen: DetailsScreen,},},{initialRouteName: 'Home',});constTabNavigator=createBottomTabNavigator({Home: HomeNavigator,Mine: MineNavigator,},{tabBarOptions: {activeTintColor: 'tomato',inactiveTintColor: 'gray',},});exportdefaultcreateAppContainer(TabNavigator);
网络
React Native 提供了和 web 标准一致的Fetch API,用于满足开发者访问网络的需求。如果你之前使用过XMLHttpRequest(即俗称的 ajax)或是其他的网络 API,那么 Fetch 用起来将会相当容易上手。
Uh oh!
There was an error while loading. Please reload this page.
安装
我们推荐使用
Homebrew
来安装Node
和Watchman
。在命令行中执行下列命令安装:如果你已经安装了 Node,请检查其版本是否在 v8.3 以上。安装完 Node 后建议设置 npm 镜像以加速后面的过程(或使用科学上网工具)。
注意:不要使用 cnpm!cnpm 安装的模块路径比较奇怪,packager 不能正常识别!
Yarn、React Native 的命令行工具(react-native-cli)
Yarn是 Facebook 提供的替代 npm 的工具,可以加速 node 模块的下载。React Native 的命令行工具用于执行创建、初始化、更新项目、运行打包服务(packager)等任务
安装完 yarn 后同理也要设置镜像源:
创建项目
使用 React Native 命令行工具来创建一个名为
AwesomeProject
的新项目:启动
进入ios文件夹用Xcode打开

AwesomeProject.xcodeproj
文件,并启动props
大多数组件在创建时就可以使用各种参数来进行定制。用于定制的这些参数就称为props属性。
布局
在组件样式中使用flex可以使其在可利用的空间中动态地扩张或收缩。一般而言我们会使用flex:1来指定某个组件扩张以撑满所有剩余的空间。如果有多个并列的子组件使用了flex:1,则这些子组件会平分父容器中剩余的空间。如果这些并列的子组件的flex值不一样,则谁的值更大,谁占据剩余空间的比例就更大(即占据剩余空间的比等于并列组件间flex值的比)。
组件
可以新建
src/components 文件夹
新建Greeting.js
,并在App.js
中引入import Greeting from './components/Greeting/Greeting.js';
,并使用<Greeting name='Eno Yao’ />
事件
点击这个按钮会调用
onPress
函数,具体作用就是显示一个 alert 弹出框。处理文本输入
TextInput是一个允许用户输入文本的基础组件。它有一个名为onChangeText的属性,此属性接受一个函数,而此函数会在文本变化时被调用。另外还有一个名为onSubmitEditing的属性,会在文本被提交后(用户按下软键盘上的提交键)调用。
导航
在你的
React Native
项目中安装react-navigation
这个包然后,安装
react-native-gesture-handler
Link
所有的原生依赖,这一步是必须的,之前漏了这一步在这里花费了很多时间react-native link react-native-gesture-handler # or react-native link
在
App.js
中把代码替换为下面这些导航跳转
将路由页面封装模块化封装进组件里面
导航栏标题
导航栏按钮
底部导航条
网络
React Native 提供了和 web 标准一致的Fetch API,用于满足开发者访问网络的需求。如果你之前使用过XMLHttpRequest(即俗称的 ajax)或是其他的网络 API,那么 Fetch 用起来将会相当容易上手。
基础组件
Picker
本组件可以在iOS和Android上渲染原生的选择器Picker
ScrollView && FlatList
能实现下拉刷新
FlatList更适于长列表数据,且元素个数可以增删。和ScrollView不同的是,FlatList并不立即渲染所有元素,而是优先渲染屏幕上可见的元素。
FlatList组件必须的两个属性是data和renderItem。data是列表的数据源,而renderItem则从数据源中逐个解析数据,然后返回一个设定好格式的组件来渲染。
实现上拉刷新
参考文档
The text was updated successfully, but these errors were encountered: