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={{fontSize:20,backgroundColor:‘red‘}}>Hello, {this.props.name}</Text>
    }
}

2.ES5创建组件的方式

var HelloComponent = React.createClass({
    render () {
        return <Text style={{fontSize:20,backgroundColor:‘red‘}}>Hello</Text>
    }
})

//导出
module.exports = HelloComponent;

3.函数式定义的无状态组件

/**
 * 方式三:函数式
 * 无状态,不能使用this
 */
function HelloComponent(props) {
    return <Text style={{fontSize:20,backgroundColor:‘red‘}}>Hello, {props.name}</Text>
}

module.exports = HelloComponent

组件的生命周期

如图,可以把组件的生命分为三个阶段

第一阶段:是组件第一次绘制阶段,如图中的上面虚线框内,在这里完成了组件的加载和初始化

第二阶段:是组件在运行和交互阶段,如图中左下角虚线框,这个阶段组件可以处理用户交互,或者接收事件更新界面

第三阶段:是组件卸载消亡的阶段,如图中右下角的虚线框中,这里做一些组件的清理工作

第一阶段(除render方法外)和第三阶段,所有的方法都是一次性调用(只会调用一次),第二阶段里面的所有方法会多次被调用。

导入与导出

导出组件

ES6:export defalut

ES5: module.exports = 组件名

导入组件

import

上面创建组建的时候有提到过,可以参考。

导出变量和常量

/**
 *导出一个变量
 */
export var name = ‘小明‘
var age = ‘22‘
/**
 *导出常量
 */
const sex = ‘男‘

/**
 * 批量导出
 */
export {name, age}

导入变量

import 组件名,{导入的变量或者方法名} from ...

import ImportExportComponent, {name, age} from ‘./importExportComponent‘

导出方法
export function sum(a, b)

导入方法

import ImportExportComponent, {name, age, sum} from ‘./importExportComponent‘

React Native的props使用详解

props是父组件传递给子组件,或者是本组件定义的默认默认属性。props是只读的,无法修改。

定义默认属性

static defaultProps = {
        name:‘Jackie‘
    }

属性检查机制

static propTypes = {
        name:PropTypes.string,   //name必须为string类型
        age:PropTypes.number,    //age必须为数字类型
        sex:PropTypes.string.isRequired,  //性别必须传递
    }

查看源码,属性检查机制支持的类型如下:

var ReactPropTypes = {
  array: createPrimitiveTypeChecker(‘array‘),
  bool: createPrimitiveTypeChecker(‘boolean‘),
  func: createPrimitiveTypeChecker(‘function‘),
  number: createPrimitiveTypeChecker(‘number‘),
  object: createPrimitiveTypeChecker(‘object‘),
  string: createPrimitiveTypeChecker(‘string‘),
  symbol: createPrimitiveTypeChecker(‘symbol‘),

  any: createAnyTypeChecker(),
  arrayOf: createArrayOfTypeChecker,
  element: createElementTypeChecker(),
  instanceOf: createInstanceTypeChecker,
  node: createNodeChecker(),
  objectOf: createObjectOfTypeChecker,
  oneOf: createEnumTypeChecker,
  oneOfType: createUnionTypeChecker,
  shape: createShapeTypeChecker
};

延展操作符和结构赋值

export default class setup extends Component {
    render() {
        var params = {name:‘小张‘, age:18, sex:‘男‘};
        //取出部分属性
        var {name, sex} = params;
        return (
            <View style={styles.container}>
                <HelloComponent
                    //name="Jackie"
                    //ES6延展操作符
                    {...params}
                    //ES6结构赋值,可以从一组属性中获取指定属性
                    name={name}
                    sex={sex}
                />

                <Text style={{fontSize:20}}>名字:{name}</Text>
                <Text style={{fontSize:20}}>年龄:{age}</Text>
            </View>
    );
    }

state

因为上面提到的props是只读的,无法改变,为了实现交互,我们用到了state。我们可以把组件看成一个状态机,UI看成各种状态,并在各种状态之间进行切换,只需要改变state,React Native就会重新渲染UI。

ref

ref可以看作是组件渲染后指向组件的一个引用,通过ref可以获取真实的组件。

对熟悉Java,object-c,C#等纯面向对象的开发者来说,都会对class有一种特殊的情怀,ES6中引入了class(类),让JavaScript的面向对象编程变得更加简单和容易理解。

Student.js

/**
 * Created by jie.cheng on 2017/3/7.
 */
export default class Student {
    constructor(name, age, sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    toString() {
        return "姓名:" + this.name + " 年龄:" + this.age + " 性别:" + this.sex;
    }
}

使用:

export default class setup extends Component {
    constructor(props) {
        super(props)
        this.student = new Student("小刚", 16, "男");
    }

    render() {
        return (
            <View style={styles.container}>
                <Text style={{fontSize:20}}>{this.student.toString()}</Text>
            </View>
    );
    }
}

React Native布局知识

React Native中的布局方式FlexBox。FlexBox是CSS3弹性框布局规范,目前还处于最终征求意见稿 (Last Call Working Draft)阶段,并不是所有的浏览器都支持Flexbox。但大家在做React Native开发时大可不必担心FlexBox的兼容性问题,因为既然React Native选择用FlexBox布局,那么React Native对FlexBox的支持自然会做的很好。

宽和高

在学习FlexBox之前首先要清楚一个概念“宽和高”。一个组件的高度和宽度决定了它在屏幕上的尺寸,也就是大小。

像素无关

在React Native中尺寸是没有单位的,它代表了设备独立像素。

<View style={ {width:100,height:100,margin:40,backgroundColor:‘gray‘}}>
        <Text style={ {fontSize:16,margin:20}}>尺寸</Text>
</View>

上述代码,运行在Android上时,View的长和宽被解释成:100dp 100dp单位是dp,字体被解释成16sp 单位是sp,运行在iOS上时尺寸单位被解释称了pt,这些单位确保了布局在任何不同dpi的手机屏幕上显示不会发生改变。

React Native按钮

在做App开发过程中离不了的需要用户交互,说到交互,我们首先会想到的就是按钮了,在React Native中没有专门的按钮组件。 为了能让视图能够响应用的的点击事件,我们需要借助Touchablexxx组件,来包裹我们的视图。为什么说是Touchablexxx呢,因为它不只是一个组件,而是一组组件,一下四个组件都可以用来包裹视图来响应用户的点击事件。

TouchableWithoutFeedback:响应用户的点击事件,如果你想在处理点击事件的同时不显示任何视觉反馈,使用它是个不错的选择。

TouchableHighlight:在TouchableWithoutFeedback的基础上添加了当按下时背景会变暗的效果。

TouchableOpacity:相比TouchableHighlight在按下去会使背景变暗的效果,TouchableOpacity会在用户手指按下时降低按钮的透明度,而不会改变背景的颜色。

TouchableNativeFeedback在Android上还可以使用TouchableNativeFeedback,它会在用户手指按下时形成类似水波纹的视觉效果。注意,此组件只支持Android。

React Native图片加载技巧

使用本地静态图片

可以不指定大小,默认是图片的大小

render() {
        return <View>
            <image
                source={require(‘./qiqiu.png‘)}
            />
        </View>
    }

也可以指定大小

render() {
        return <View>
            <image
                style={{width:500,height:100,borderWidth:1}}
                source={require(‘./qiqiu.png‘)}
            />
        </View>
    }

使用网络图片

render() {
        return <View>
            <image
                style={{width:500,height:100,borderWidth:1}}
                source={{uri:‘图片地址‘}}
            />
        </View>
    }

注意,加载网络图片时,一定要指定图片的宽和高,不然,网络图片无法渲染。
使用原生图片资源

render() {
        return <View>
            <image
                style={{width:500,height:100,tintColor:‘red‘}}
                source={{uri:‘图片的名称‘}}
            />
        </View>
    }

注意

①tintColor表示给图片着色,加载本地资源图片,也一定要指定图片的宽和高

②对于Android来说,只能加载drawable目录下的图片,mipmap下面的图片无法加载

③由于用到了项目中的图片,所以必须重新安装应用,不能直接刷新



时间: 2024-12-25 20:51:53

React Native基础与入门(二)--初识React Native的相关文章

Android Native 程序逆向入门(一)—— Native 程序的启动流程

八月的太阳晒得黄黄的,谁说这世界不是黄金?小雀儿在树荫里打盹,孩子们在草地里打滚.八月的太阳晒得黄黄的,谁说这世界不是黄金?金黄的树林,金黄的草地,小雀们合奏着欢畅的清音:金黄的茅舍,金黄的麦屯,金黄是老农们的笑声. —— 徐志摩·八月的太阳 ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 在生成 native 程序时,在链接阶段会传入一个链接脚本,在该脚本中指定了程序的入口函数. 可以看到,在默认的链接脚本 armelf_linux_eabi.x 中

React Native基础&amp;入门教程:初步使用Flexbox布局

在上篇中,笔者分享了部分安装并调试React Native应用过程里的一点经验,如果还没有看过的同学请点击<React Native基础&入门教程:调试React Native应用的一小步>. 在本篇里,让我们一起来了解一下,什么是Flexbox布局,以及如何使用. 一.长度的单位 在开始任何布局之前,让我们来首先需要知道,在写React Native组件样式时,长度的不带单位的,它表示“与设备像素密度无关的逻辑像素点”. 这个怎么理解呢? 我们知道,屏幕上一个发光的最小点,对应着一个

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

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

React.js 基础入门四--要点总结

JSX语法,像是在Javascript代码里直接写XML的语法,实质上这只是一个语法糖,每一个XML标签都会被JSX转换工具转换成纯Javascript代码,React 官方推荐使用JSX, 当然你想直接使用纯Javascript代码写也是可以的,只是使用JSX,组件的结构和组件之间的关系看上去更加清晰. 1. HTML 标签 和 React 组件 在JS中写HTML标签,也许小伙伴们都惊呆了,那么React又是怎么区分HTML标签,React组件标签? HTML标签: var myDivEle

【REACT NATIVE 系列教程之二】创建自定义组件&&导入与使用示例

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/react-native/2219.html 在上一篇  [REACT NATIVE 系列教程之一]触摸事件的两种形式与四种TOUCHABLE组件详解 中的最后介绍了如何使用Touchable的四种组件进行监听触摸事件.  那么紧接着我们利用Touchable来包装一个带图片的Button组件,且设计成可接受很多自定义参数. 一:创建我们自定义

【REACT NATIVE 系列教程之十二】REACT NATIVE(JS/ES)与IOS(OBJECT-C)交互通信

一用到跨平台的引擎必然要有引擎与各平台原生进行交互通信的需要.那么Himi先讲解React Native与iOS之间的通信交互. 本篇主要分为两部分讲解:(关于其中讲解的OC语法等不介绍,不懂的请自行学习) 1. React Native 访问iOS 2. iOS访问React Native     一:React Native 访问iOS 1. 我们想要JS调用OC函数,就要实现一个"RCTBridgeModule"协议的Objective-C类 所以首先我们先创建一个oc新类,  

初识React Native

前言 React Native是最近非常火的一个话题,想要学习如何使用它,首先就要知道它是什么. 好像面对一个新手全面介绍它的文章还不多,我就归纳一下所有的资料和刚入门的小伙伴一起来认识它~ 将从以下几个方面来介绍它: 1.React Native的定义 2.React Native的优缺点 2.学习React Native需要掌握的知识 React Native的定义 一句话就是:一款专门用于App的JS框架. React Native 结合了 Web App和 Native App的优势,使

初识React

原文地址:北云软件-初识React 专注于UI 在MVC分层设计模式中,react常被拿来实现视图层(V).React不依赖于技术栈的其他部分,因此可以方便的在现有项目中尝试用它来实现一个小特性. 虚拟DOM React从DOM中抽象出来,给出一种更简洁的编程模型,且性能表现更好.能够通过NodeJS实现服务端渲染,通过React Native开发原生app. 数据流React实现单向.响应式数据流,减少boilerplate且比传统数据绑定更容易理解. 简洁的组件React的组件都实现了一个r

问道python之基础篇【二】python入门

问道python之基础篇[二] Python入门 1.python的工作过程 python解释器把源代码转换为字节码的中间形式,然后再把它翻译成机器使用的机器语言并运行. 2.pyc文件 2.1.什么是pyc文件 执行python代码时,如果导入了其他的.py文件,那么在执行过程中会自动生成一个与其同名的.pyc文件,该文件就是python解释器编译之后产生的字节码. ps:代码经过编译可以产生字节码:字节码通过反编译也可以得到代码. Pyc文件一般由3个部分组成: 最开始4个字节是一个Maig