React Native 二:快速入门

前面我们使用react-native init创建了一个项目,这是一个简单的Hello World App(项目结构如下图)。对于iOS来说,你需要编辑index.ios.js来改变App;对于Android,你需要编辑index.android.js来修改App。然后摇晃菜单中点击Road JS查看改变。下面我们就以Android为例子来尝试修改了App。

一、修改index.android.js文件

index.android.js文件:

//Mock数据
var MOCKED_MOVIES_DATA = [
  {title: ‘Title‘, year: ‘2015‘, posters: {thumbnail: ‘http://i.imgur.com/UePbdph.jpg‘}},
];
//导入React-Native相关组件
import React, {
  AppRegistry,
  Component,
  Image,
  StyleSheet,
  Text,
  View,
} from ‘react-native‘;
//创建AwesomeProject组件类
class AwesomeProject extends Component {
  //使用Mock数据,通过Html渲染组件
  render() {
    var movie = MOCKED_MOVIES_DATA[0];
    return (
      <View style={styles.container}>
        <Text>{movie.title}</Text>
        <Text>{movie.year}</Text>
        <Image source={{uri: movie.posters.thumbnail}} style={styles.thumbnail}/>
      </View>
    );
  }
}
//渲染组件的样式
var styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: ‘center‘,
    alignItems: ‘center‘,
    backgroundColor: ‘#F5FCFF‘,
  },
  thumbnail: {
    width: 53,
    height: 81,
  },
});
//注册创建的AwesomeProject组件类
AppRegistry.registerComponent(‘AwesomeProject‘, () => AwesomeProject);

二、重新加载js

修改完index.android.js文件后,摇晃你的手机,会弹出如下菜单。选择Reload JS:

三、添加一些样式

现在们修改下标题,年份和图片的展示,通过添加一些样式展示呈左右布局形式,修改index.android.js文件如下:

1.index.android.js文件:

var MOCKED_MOVIES_DATA = [
  {title: ‘Title‘, year: ‘2015‘, posters: {thumbnail: ‘http://i.imgur.com/UePbdph.jpg‘}},
];

import React, {
   ... ...
} from ‘react-native‘;
class AwesomeProject extends Component {
  render() {
    var movie = MOCKED_MOVIES_DATA[0];
    return (
      //书写新的渲染样式
      <View style={styles.container}>
        <Image
          source={{uri: movie.posters.thumbnail}}
          style={styles.thumbnail}/>
        <View style={styles.rightContainer}>
          <Text style={styles.title}>{movie.title}</Text>
          <Text style={styles.year}>{movie.year}</Text>
        </View>
      </View>
    );
  }
}
var styles = StyleSheet.create({
  container: {
    flex: 1,
    //横向排列
    flexDirection: ‘row‘,
    justifyContent: ‘center‘,
    alignItems: ‘center‘,
    backgroundColor: ‘#F5FCFF‘,
  },
  //渲染剩余空间
  rightContainer: {
      flex: 1,
  },
  thumbnail: {
    width: 53,
    height: 81,
  },
  //添加title和year展示样式
  title: {
    fontSize: 20,
    marginBottom: 8,
    textAlign: ‘center‘,
  },
  year: {
    textAlign: ‘center‘,
  },
});
AppRegistry.registerComponent(‘AwesomeProject‘, () => AwesomeProject);

2.重新加载JS,展示如下:

四、获取真实数据

下面我们从Rotem Tomatoes.s的API获取数据,用于React-Native展示:

1.修改index.android.js文件

//获取远程真实数据的URL
var REQUEST_URL = ‘https://raw.githubusercontent.com/facebook/react-native/master/docs/MoviesExample.json‘;
import React, {
   ... ...
} from ‘react-native‘;
class AwesomeProject extends Component {
  //构造函数,初始化movies为null
  constructor(props) {
    super(props);
    this.state = {
      movies: null,
    };
  }
  //组件在加载到虚拟DOM的时候,请求API数据
  componentDidMount() {
    this.fetchData();
  }
  //请求API数据
  fetchData() {
    fetch(REQUEST_URL).then((response) => response.json()).then((responseData) => {
      this.setState({
        movies: responseData.movies,
      });
    }).done();
  }
  render() {
    //未请求数据,正在加载中...
    if (!this.state.movies) {
      return this.renderLoadingView();
    }
    //数据返回了,渲染电影数据
    var movie = this.state.movies[0];
    return this.renderMovie(movie);
  }
  //渲染正在加载中
  renderLoadingView() {
    return (
      <View style={styles.container}>
        <Text>
          Loading movies...
        </Text>
      </View>
    );
  }
  //渲染获取电影数据
  renderMovie(movie) {
    return (
      <View style={styles.container}>
        <Image
          source={{uri: movie.posters.thumbnail}}
          style={styles.thumbnail}/>
          <View style={styles.rightContainer}>
            <Text style={styles.title}>{movie.title}</Text>
            <Text style={styles.year}>{movie.year}</Text>
          </View>
      </View>
    );
  }
}
var styles = StyleSheet.create({
  ... ...
});
AppRegistry.registerComponent(‘AwesomeProject‘, () => AwesomeProject);

2.重新加载JS,显示如下:

五、列表展示

我们尝试把API中请求返回的所有数据,用ListView展示出来;

1.修改index.android.js文件;

var REQUEST_URL = ‘https://raw.githubusercontent.com/facebook/react-native/master/docs/MoviesExample.json‘;
import React, {
  ... ...
  //引入列表控件
  ListView,
  ... ...
} from ‘react-native‘;
class AwesomeProject extends Component {
  constructor(props) {
    super(props);
    //初始化列表数据源dataSource
    this.state = {
      dataSource: new ListView.DataSource({
        rowHasChanged: (row1, row2) => row1 !== row2,
      }),
      loaded: false,
    };
  }

  componentDidMount() {
    this.fetchData();
  }

  fetchData() {
    fetch(REQUEST_URL).then((response) => response.json()).then((responseData) => {
      this.setState({
        //请求API返回的电影数据作为列表的数据源
        dataSource: this.state.dataSource.cloneWithRows(responseData.movies),
        loaded: true,
      });
    }).done();
  }

  render() {
    if (!this.state.loaded) {
      return this.renderLoadingView();
    }

    return (
      <ListView
        dataSource={this.state.dataSource}
        renderRow={this.renderMovie}
        style={styles.listView}/>
    );
  }
  renderLoadingView() {
    ... ...
  }
  renderMovie(movie) {
    return (
      ... ...
    );
  }
}
var styles = StyleSheet.create({
  ... ...
  //列表展示样式
  listView: {
    paddingTop: 20,
    backgroundColor: ‘#F5FCFF‘,
  },
});
AppRegistry.registerComponent(‘AwesomeProject‘, () => AwesomeProject);

2.重新加载JS,显示如下:

时间: 2024-10-10 20:45:26

React Native 二:快速入门的相关文章

React Native基础与入门(二)--初识React Native

React Native组件 React Native是用React Native框架来组建Android和IOS App的技术,那么React Native组件就是React组件.React组件让你将UI分割成独立的.可重用的一些碎片或部分,这些部分都是相互独立的. 创建组件的三种方式 1.ES6创建组件的方式 export default class HelloComponent extends Component { render() { return <Text style={{font

【REACT NATIVE 系列教程之九】REACT NATIVE版本升级步骤与注意事项!

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/react-native/2288.html 由于React Native处于快速迭代发展中,因此组件功能的扩展.语法的变更也将会有较大的区别,因此升级版本则属于务必掌握的了. 昨天Himi刚从0.23版本升级到0.26,升级的主要原因有两点: 1. 一些组件在最新版本中加入了很多新的属性,例如0.23版本中Modal动画没有最新的属性: an

大数据技术之_20_Elasticsearch学习_01_概述 + 快速入门 + Java API 操作 + 创建、删除索引 + 新建、搜索、更新删除文档 + 条件查询 + 映射操作

一 概述1.1 什么是搜索?1.2 如果用数据库做搜索会怎么样?1.3 什么是全文检索和 Lucene?1.4 什么是 Elasticsearch?1.5 Elasticsearch 的适用场景1.6 Elasticsearch 的特点1.7 Elasticsearch 的核心概念1.7.1 近实时1.7.2 Cluster(集群)1.7.3 Node(节点)1.7.4 Index(索引 --> 数据库)1.7.5 Type(类型 --> 表)1.7.6 Document(文档 -->

React Native入门(二)Atom+Nuclide安装、配置与调试

相关文章 React Native入门 前言 上一篇文章我们搭建了开发环境,并写了个Hello World.这一节我们来学习React Native的开发IDE:Atom+Nuclide的安装.配置与调试.本文所讲的内容只适用于Mac平台. 1.开发IDE选择 React Native的开发IDE有很多种,比如FaceBook 官方推荐的 Atom+Nuclide.Android Studio的同门WebStorm(收费).Sublime Text 3.Visual Studio Code和De

更快速的 React Native 快速入门

版权声明:本文为Marno原创,首发公众号 aMarno ,转载必须在明确位置注明出处! 本文为 Marno 原创,转载必须保留出处! 公众号 aMarno,关注后回复 RN 加入交流群 简书专题< React-Native 开发阵营 >,欢迎关注和投稿 React Native 优秀开源项目大全:https://github.com/MarnoDev/react-native-open-project 一.面临问题 从某种程度上而言,目前为止 RN 只是给拥有 Mac 电脑的开发者提供了跨平

React Native 快速入门之认识Props和State

眼下React Native(以后简称RN)越来越火,我也要投入到学习当中.对于一个前端来说,还是有些难度.因为本人觉得这是一个App开发的领域,自然是不同.编写本文的时候,RN的版本为0.21.0.我们马上以代码进入今天的学习. 'use strict'; import React, { AppRegistry, Component, StyleSheet, Text, View } from 'react-native'; class Hello extends Component { re

React Native 入门宝典

声明:该书的笔者为徐嬴老师,一名具有5年IOS开发经验,和两年RN开发经验的老司机. 原文可以在gitbook上找到 笔者只是为他的书中提的的一些列问题,进行有偿答疑. 有偿答疑.本书将持续保持更新,有关问题可以加群讨论. 正在上传...取消 简介 笔者在研究ReactNative过程中,发现其中文资料相对较少,已出版的大部分图书资料都已过时.Facebook中的ReactNative开发团队以每月更新一版的速度在向前推进版本. 为更好的让广大开发者快速入门ReactNative,笔者结合自身开

为React Native开发写的JS和React入门知识

来自Leo的原创博客,转载请著名出处 我的stackoverflow 前言 想来想去,还是需要写一篇文章来介绍下JavaScript和React的基本知识.最初开发ReactNative的时候,完全没接触过React,大学那会简单学了点JS.毕业后一直在某五百强外企上班.做的东西也乱七八糟的,搞过大数据,搞过物联网,不过看我博客的同学应该知道,我对iOS和Android还是比较喜欢的.所以,博客都是写的都是移动端的东西.好像扯的有点多了,本文的目的就是为了那些JS和React小白提供一个快速入门

React Native 从入门到原理

抛砖引玉(帮你更好的去理解怎么产生的 能做什么) 砖一.动态配置 由于 AppStore 审核周期的限制,如何动态的更改 app 成为了永恒的话题.无论采用何种方式,我们的流程总是可以归结为以下三部曲:"从 Server 获取配置 –> 解析 –> 执行native代码". 很多时候,我们自觉或者不自觉的利用 JSON 文件实现动态配置的效果,它的核心流程是: 通过 HTTP 请求获取 JSON 格式的配置文件. 配置文件中标记了每一个元素的属性,比如位置,颜色,图片 UR