前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >React-Native简介

React-Native简介

作者头像
IMWeb前端团队
发布于 2019-12-03 10:05:13
发布于 2019-12-03 10:05:13
1.2K00
代码可运行
举报
文章被收录于专栏:IMWeb前端团队IMWeb前端团队
运行总次数:0
代码可运行

本文作者:IMWeb helondeng 原文出处:IMWeb社区 未经同意,禁止转载

React-Native 基于目前React来开发IOS原生应用,Android版本将在年底推出。

为什么需要React-Native

目前主流的应用大体分成三类:Native App, Web App, Hybrid App.

Native App

优点

  • 性能好,性能好,还是性能好 缺点
  • 开发成本高,无法跨平台
  • 升级困难
Web App

优点

  • 跨平台,Write Once , Run Anywhere
  • 版本升级容易 缺点
  • 无法系统系统级的API
  • 临时入口,用户留存度低
  • 性能差
Hybrid App

Native App 和 Web App 折中的方案,保留了 Native App 和 Web App 的优点。但是最受吐槽的还是性能差。页面渲染效率低,在Webview中绘制界面,实现动画,资源消耗都比较大。

React-Native

What we really want is the user experience of the native mobile platforms, combined with the developer experience we have when building with React on the web.

这是 React-Native 设计的初衷: 既保留流畅的用户体验,有保留React的开发效率

React-Native 做了什么

  • React-Native 丢弃了 Webview。
  • 复用React,将 Dom 结构de改变通过 diff 算法处理后,由 js 传递给 native 进行底层视图布局。
  • css-layout引擎,前端可以继续写熟悉的 css 语法,由引擎转化成 oc 底层的布局。
  • 对 js 暴露底层常用的 UI 组建。js 层可以直接对这些组件进行布局。

对应前端的开发模式的变化:

  • JSX vs Html
  • css-layout vs css
  • ECMAScript 6 vs ECMAScript 5
  • React-Native vs DOM

如何开始

1) 安装以来的包和软件,参考这里。 2) 运行下面的命令,初始化项目:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
react-native init helloworld

3) 在项目目录下面,运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    npm install
    npm start

4) 使用 Xcode 开发项目,运行,即可看到模拟器中的效果。这里有可能会运行失败报错,主要可以从2方面排查:

  • AppDelegate.m 中 jsCodeLocation 的定义是否正确。
  • 删除 /Users/{you}/Library/Developer/Xcode/DerivedData 文件夹,重启Xcode。 (PS: 官方给的例子好几个都有上面的问题,跑不起来)

5) 修改目录下的 index.ios.js 文件,定制自己的UI。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    render : function() {    
        return (
            <View style={styles.container}>
            <Text>Hello World!</Text>
            </View>

        )
    }

cmd + R 刷新模拟器即可看到效果,就是这么简单。

进阶玩法,自定义UI组件

如下图,实现课程列表的效果(下图是react-native实现效果,原效果猛戳这里,只实现了页面中的listview):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    var CList = React.createClass({
    getInitialState: function(){
        var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
        return {
            dataSource: ds.cloneWithRows(data),
            load: false
        }
    },    
    render: function(){
        return (
            <ListView dataSource={this.state.dataSource} 
            renderRow={this.renderRow} 
            style={styles.courseList} />
        )    
    },
    renderRow: function(course){
        course._price = course.price == 0 ? '免费' : '¥' + (course.price / 100).toFixed(2);
        course._priceCla = {};
        course._priceCla.color = course.price == 0 ? '#5db61b' : '#e85308';
        return(
            <TouchableOpacity>
                <View style={styles.row}>
                    <View style={styles.container}>
                        <Image style={styles.face} source={{uri : course.cover_url + '222'}}/>
                        <View style={styles.right}>
                            <Text style={styles.name} numberOfLines="2">{course.name}</Text>
                            <Text style={styles.agency}>{course.agency_name}</Text>
                            <View style={{flex: 1, flexDirection: 'row'}}>
                            <Text style={[styles.price,course._priceCla]}>                        
                            {course._price}
                            </Text>
                            <Text style={{color: 'gray', flex: 1}}>{course.see_num}人观看</Text>
                            </View>
                        </View>
                    </View>
                </View>
            </TouchableOpacity>
        )
    }
});
module.exports = CList;

在入口文件中,require上面的文件,然后在render方法中直接调用改组件即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  render: function() {
    return (
        <NavigatorIOS
            style={styles.container}
            initialRoute={{
                title: '课程列表',
                component: CList,
            }} />
    );
  }

总结

小试了一下 React-Native,还是很强大的,期待Android的版本。文章中若有不对,欢迎斧正、交流。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-07-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ReactNative-ListView
这只是一个简单的listView的小demo 初始化项目之后,index.ios.js代码如下 /** * Sample React Native App * https://github.com/facebook/react-native * @flow */ import React, { Component } from 'react'; import { AppRegistry, StyleSheet, Text, View, ListView } from 'reac
czjwarrior
2018/05/28
8660
React Native ios开发第一课
前言 本篇文章的作用在于帮助你快速上手使用React Native编写iOS应用。如果你现在还不太了解React Native是什么以及Facebook为什么要创建React Native,你可以先看看这篇博客。 阅读本文之前,我们假设你已经有过使用React创建网站的经验。如果你还是一个React新手,那么我们建议你从React的网站开始学习。 设置 使用React Native开发iOS应用需要OSX系统,Xcode,Homebrew,node,npm以及watchman,你也可以有选择的使用Flo
xiangzhihong
2018/02/05
1.7K0
React Native ios开发第一课
React Native控件之ListView
概述 ListView作为核心组件之一,主要用于高效地显示一个可以垂直滚动的变化的数据列表。经过自定义组装,我们还可以用它实现九宫格等页面效果。 在React Native中,使用ListView组件至少需要两个属性:DataSource和renderRow。DataSource是需要渲染界面的数据源,renderRow是根据数据源的元素返回的可渲染的组件,即ListView的一行。 在React Native中,最基本的使用方式就是创建一个ListView.DataSource数据源,然后给它传递
xiangzhihong
2018/02/06
1.6K0
React Native控件之ListView
React-Native入门指南(一)
最近手头的工作繁多,有研究性的项目和系统研发,正好遇到同事离职,接手了框架的UI组件,不仅需要维护和填坑,还需要开发新的功能组件。因为身在H5-Hybird的框架部门,最近团队开始尝试使用React-Native来做些东西。之前也有过开发iOS App的冲动,学了点Object-c,这次正好借此机会进入App开发,以弥补自己在Native-App上的经验不足。
疯狂的技术宅
2019/03/28
2.3K0
React-Native入门指南(一)
React-Native踩坑记
最近使用react-native参与开发了个应用,记录下其中踩的一些坑。本人使用的是mac电脑进行开发,本文仅对此平台进行记录? 下载不了xcode 升级自己的mac的系统到最新版本,之后在mac的应
Jimmy_is_jimmy
2019/07/31
2.3K0
React native城市列表组件
城市列表选择是很多app共有的功能,比如典型的美图app。那么对于React Native怎么实现呢? 要实现上面的效果,首先需要对界面的组成简单分析,界面的数据主要由当前城市,历史访问城市和热门城
xiangzhihong
2018/01/26
2.4K0
React-Native组件之 Navigator和NavigatorIOS
对于app而言,一款应用往往涉及到很多的页面,而页面之间的跳转Android和iOS实现也各不相同。在iOS上,系统为我们提供了UINavigationController控件用来专门控制页面的跳转,iOS的实现思路很清晰,为按钮添加action事件,点击之后跳转到指定的页面即可。例如: //定义一个Button,点击后跳转到另一个页面 UIButton * button=[UIButton buttonWithType:UIButtonTypeSystem]; button.frame=C
xiangzhihong
2018/02/06
4.5K0
React-Native组件之 Navigator和NavigatorIOS
React-Native踩坑记
最近使用react-native参与开发了个应用,记录下其中踩的一些坑。本人使用的是mac电脑进行开发,本文仅对此平台进行记录? 下载不了xcode 升级自己的mac的系统到最新版本,之后在mac的应
Jimmy_is_jimmy
2020/10/15
2K0
react-native添加redux支持
redux简介 redux是一个用于管理js应用状态的容器。redux出现时间并不是很长,在它出现之前也有类似功能的模块出现,诸如flux等等。redux设计的理念很简单,似乎最初这个开发团队就有让r
xiangzhihong
2018/02/06
1.7K0
react-native添加redux支持
A Cold Dive into React Native (Tutorial for Beginners)
原文:A Cold Dive into React Native (Tutorial for Beginners)
WindCoder
2018/09/19
9180
A Cold Dive into React Native (Tutorial for Beginners)
RN实现ListView
(1)实现单个item import React, {Component, PropTypes} from 'react'; import { AppRegistry, StyleSheet, Text, View, Dimensions, Platform, Image } from 'react-native'; const {width, height} = Dimensions.get('window'); export default c
提莫队长
2018/05/18
1.2K0
React Native 系列(二) -- React入门知识
前言 本系列是基于React Native版本号0.44.3写的,最初学习React Native的时候,完全没有接触过React和JS,本文的目的是为了给那些JS和React小白提供一个快速入门,让你们能够在看React Native语法的时候不那么费劲,有过前端开发经验的可以直接忽略。 什么是React React是一个JavaScript框架,用来开发web应用。Web应用开发中,比较流行的有三个框架: react angular vue 从名字上,就能看到react native是基于React(都
Scott_Mr
2018/05/16
1.7K0
React-Native开发规范文档
方式表达逻辑,【强制】请勿超过3层, 超过请使用状态设计模式。 正例:逻辑上超过 3 层的 if-else 代码可以使用卫语句,或者状态模式来实现。
conanma
2021/11/02
2.1K0
react native仿微信PopupWindow效果
在原生APP开发中,相信很多开发者都会见到这种场景:点击右上角更多的选项,弹出一个更多界面供用户选择。这种控件在原生开发中Android可以用PopupWindow实现,在ios中可以用CMPopTi
xiangzhihong
2018/02/06
2.6K0
react native仿微信PopupWindow效果
React Native 表格组件
npm install--save react-native-data-table
forrest23
2018/08/03
1.8K0
React Native 表格组件
React Native之ListView实现九宫格效果
概述 在安卓原生开发中,ListView是很常用的一个列表控件,那么React Native(RN)如何实现该功能呢?我们来看一下ListView的源码 ListView是基于ScrollView扩展
xiangzhihong
2018/02/05
2.7K0
React Native之ListView实现九宫格效果
ReactNative-综合案例(02)
最近几天学了几个ReactNative组件,总觉得单纯的学几个组件进步慢,所以我打算做一些综合性的小案例,练习下实战,我从网上找到一个小案例 ,感觉挺好,也学习了很多,代码内容可能不太一样,主要区别是:我把RN官方不推荐或者已经放弃了的组件进行了替换,如果有需要的可以互相参考下 接着上篇案例开始写,这篇文章将会讲解如何编写轮播图和列表 源代码下载 首先WYHome.js代码如下: import React, { Component } from 'react'; import { StyleS
czjwarrior
2018/05/28
7790
React Native的列表显示
前言 在一个移动App中,我们最常用的内容展现形式就是列表。今天,我们尝试用React Native完成对列表的开发。 ListView ListView作为一个React Native官方提供的控件,我们需要了解它的属性。 dataSource 是列表的数据源,通常以一个数组的形式传给ListView。 renderRow 是列表的表现层,我们可以获得dataSource的单项数据,然后用于单项渲染。 官方例子 import React, { Component } from 'react'; impor
Oceanlong
2018/07/03
1.9K0
React-Native入门指南 终章
在facebook React-native的官网可以看到目前支持的组件如下: https://facebook.github.io/react-native/docs/getting-started.html#content
疯狂的技术宅
2019/03/28
1.5K0
React-Native入门指南 终章
React Native 系列(七) -- ListView
前言 本系列是基于React Native版本号0.44.3写的。几乎所有的App都使用了ListView这种组件,这篇文章将学习RN中ListView的平铺样式和分组样式。 ListView平铺样式 ListView内部是通过ListViewDataSource这个对象显示数据的,因此使用ListView的时候需要创建一个ListViewDataSource对象。 ListViewDataSource构造方法创建对象的时候可以选择性出入4个参数,描述怎么提取cell,怎么刷新cell 这些参数都是函数,当
Scott_Mr
2018/05/16
1.3K0
相关推荐
ReactNative-ListView
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验