欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

React-Native中一些常用组件的用法详解(一)

程序员文章站 2022-06-29 12:00:28
前言 本文为大家介绍一下react-native中一些常用的组件,由于对es6的语法并没有完全掌握,这里暂时用es5和es6混用的语法。 view组件 view是...

前言

本文为大家介绍一下react-native中一些常用的组件,由于对es6的语法并没有完全掌握,这里暂时用es5和es6混用的语法。

view组件

view是一个支持flexbox布局、样式、一些触摸处理、和一些无障碍功能的容器,并且它可以放到其它的视图里,也可以有任意多个任意类型的子视图。

view的设计初衷是和stylesheet搭配使用,这样可以使代码更清晰并且获得更高的性能。尽管内联样式也同样可以使用。

view的常用样式设置

  • flex布局样式
  • backgroundcolor:背景颜色
  • bordercolor:边框颜色
  • borderwidth:边框大小
  • borderradius:圆角

以手机端携程官网为示例

import react, { component } from 'react';
import {
 appregistry,
 stylesheet,
 text,
 view
} from 'react-native';
var viewtest = react.createclass({
 render () {
 return (
 <view style={styles.container}>
 <view style={[styles.flex, styles.center]}>
  <text style={styles.white}>酒店</text>
 </view>
 <view style={styles.flex}>
  <view style={[styles.flex, styles.leftrightline, styles.bottomline, styles.center]}>
  <text style={styles.white}>海外酒店</text>
  </view>
  <view style={[styles.flex, styles.leftrightline, styles.center]}>
  <text style={styles.white}>特价酒店</text>
  </view>
 </view>
 <view style={styles.flex}>
  <view style={[styles.flex, styles.bottomline, styles.center]}>
  <text style={styles.white}>团购</text>
  </view>
  <view style={[styles.flex, styles.center]}>
  <text style={styles.white}>民宿•客栈</text>
  </view>
 </view>
 </view>
 )
 }
});
var styles = stylesheet.create({
 container: {
 margin: 10,
 margintop: 25,
 height: 75,
 flexdirection: "row",
 backgroundcolor: "#ff607c",
 borderradius: 5
 },
 flex: {
 flex: 1
 },
 white: {
 color: "white",
 fontweight: "900",
 textshadowcolor: "#ccc",
 textshadowoffset: {width: 1, height: 1}
 },
 center: {
 justifycontent: "center",
 alignitems: "center"
 },
 leftrightline: {
 borderleftwidth: 1,
 borderrightwidth: 1,
 bordercolor: "white"
 },
 bottomline: {
 borderbottomwidth: 1,
 bordercolor: "white"
 }
});
appregistry.registercomponent('helloreact', () => viewtest);

最后效果:

React-Native中一些常用组件的用法详解(一)

text组件

一个用于显示文本的react组件,并且它也支持嵌套、样式,以及触摸处理。

常用特性

  • onpress:手指触摸事件
  • numberoflines :显示多少行

常用样式设置

  • color:字体颜色
  • fontsize:字体大小
  • fontweight:字体加粗
  • textalign:对齐方式

以手机端网易新闻为示例

创建header.js和news.js两个文件

header.js具体代码如下:

import react, { component } from 'react';
import {
 appregistry,
 stylesheet,
 text,
 view
} from 'react-native';
var header = react.createclass({
 render () {
 return (
 <view style={styles.container}>
 <text style={styles.font}>
  <text style={styles.red}>网易</text>
  <text style={styles.white}>新闻</text>
  <text>有态度</text>
 </text>
 </view>
 )
 }
});
var styles = stylesheet.create({
 container: {
 margintop: 25,
 height: 44,
 alignitems: "center",
 justifycontent: "center",
 borderbottomwidth: 1,
 bordercolor: "red"
 },
 font: {
 fontsize: 25,
 fontweight: "bold"
 },
 red: {
 color: "red"
 },
 white: {
 color: "white",
 backgroundcolor: "red"
 }
});
module.exports = header;

news.js具体代码如下:

import react, { component } from 'react';
import {
 appregistry,
 stylesheet,
 text,
 view
} from 'react-native';
var news = react.createclass({
 render () {
 var content = this.props.content;
 var newlist = [];
 for (var i in content) {
 var text = <text key={i} style={styles.font}>{content[i]}</text>;
 newlist.push(text);
 }
 return (
 <view style={styles.container}>
 <text style={styles.title}>今日要闻</text>
 <view style={styles.container}>
  {newlist}
 </view>
 </view>
 )
 }
});
var styles = stylesheet.create({
 container: {
 margin: 10
 },
 title: {
 color: "red",
 fontsize: 18,
 fontweight: "bold"
 },
 font: {
 fontsize: 14,
 lineheight: 35,
 fontweight: "normal"
 }
});
module.exports = news;

最后在index.ios.js文件中修改代码为:

import react, { component } from 'react';
import {
 appregistry,
 stylesheet,
 text,
 view
} from 'react-native';
var content = [
 '1、新华社用"罕见"为里皮点赞:他是国足的不二选择',
 '2、*动员拆迁遭袭身亡 是否同意拆除双方说法不',
 '3、母亲欠债遭11人凌辱 儿子目睹后刺死1人被判无期',
 '4、美媒:美轰炸机进入中国东海防空识别区遭中方警告'
];
var header = require("./header");
var news = require("./news");
var newsnote = react.createclass({
 render () {
 return (
 <view>
 <header></header>
 <news content={content}></news>
 </view>
 )
 }
});
appregistry.registercomponent('worka', () => newsnote);

最后效果:

React-Native中一些常用组件的用法详解(一)

touchable类组件

该组件用于封装视图,使其可以正确响应触摸操作

常用样式设置

  • touchableopcity:透明触摸,点击时,组件会出现透明过度效果。
  • touchablehighlight:高亮触摸,点击时组件会出现高亮效果。
  • touchablewithoutfeedback:无反馈触摸,点击时候,组件无视觉变化。

示例

创建一个touchable.js的文件

里面代码为:

import react, { component } from 'react';
import {
 appregistry,
 stylesheet,
 text,
 view,
 touchableopacity,
 touchablehighlight,
 touchablewithoutfeedback
} from 'react-native';
var touchable = react.createclass({
 getinitialstate () {
 return {times: 0}
 },
 handlepress () {
 var sum = this.state.times;
 sum++;
 this.setstate({times: sum});
 },
 render () {
 return (
 <view>
 <touchableopacity style={styles.btn} onpress={this.handlepress}>
  <text style={styles.text}>touchableopacity</text>
 </touchableopacity>
 <touchablehighlight underlaycolor={"red"} onpress={this.handlepress} style={styles.btn}>
  <text style={styles.text}>touchablehighlight</text>
 </touchablehighlight>
 <touchablewithoutfeedback onpress={this.handlepress}>
  <view style={[styles.btn, {width: 210}]}>
  <text style={styles.text}>touchablewithoutfeedback</text>
  </view>
 </touchablewithoutfeedback>
 <text style={styles.text2}>点了{this.state.times}次</text>
 </view>
 )
 }
});
var styles = stylesheet.create({
 btn: {
 margintop: 25,
 marginleft: 20,
 width: 150,
 height: 30,
 backgroundcolor: "cyan",
 borderradius: 3,
 justifycontent: "center",
 alignitems: "center"
 },
 text: {
 fontsize: 14,
 fontweight: "bold",
 color: "blue"
 },
 text2: {
 marginleft: 25,
 margintop: 25,
 fontsize: 16
 }
});
module.exports = touchable;

在index.ios.js文件中代码更改为:

import react, { component } from 'react';
import {
 appregistry,
 stylesheet,
 text,
 view
} from 'react-native';
var touchable = require("./touchable");
var touchabletest = react.createclass({
 render () {
 return (
 <view>
 <touchable></touchable>
 </view>
 )
 }
});
appregistry.registercomponent('usecomponent', () => touchabletest);

最后效果:

React-Native中一些常用组件的用法详解(一)

图片转换成gif图可能会失去一些效果,点击touchableopacity按钮会变透明,点击touchablehighlight按钮的背景颜色会改变,点击touchablewithoutfeedback按钮没有任何变化

textinput组件

textinput是一个允许用户在应用中通过键盘输入文本的基本组件。本组件的属性提供了多种特性的配置,譬如自动完成、自动大小写、占位文字,以及多种不同的键盘类型(如纯数字键盘)等等。

常用属性

  • placeholder占位符;
  • value 输入框的值;
  • password 是否密文输入;
  • editable 输入框是否可编辑
  • returnkeytype 键盘return键类型;
  • onchange 当文本变化时候调用;
  • onendediting 当结束编辑时调用;
  • onsubmiteding 当结束编辑提交按钮时候调动;
  • onchangetext:读取textinput的用户输入;

示例

创建一个input.js的文件

里面代码为:

import react, { component } from 'react';
import {
 appregistry,
 stylesheet,
 text,
 view,
 textinput
} from 'react-native';
var input = react.createclass({
 getinitialstate () {
 return {text: ""}
 },
 changetext (text) {
 this.setstate({text: text});
 },
 render () {
 return (
  <view style={styles.container}>
  <textinput returnkeytype={"done"} style={styles.input} placeholder={"请输入"} onchangetext={this.changetext}/>
  <text style={styles.text}>{this.state.text}</text>
  </view>
 )
 }
});
var styles = stylesheet.create({
 container: {
 margintop: 25
 },
 input: {
 margin: 25,
 height: 35,
 borderwidth: 1,
 bordercolor: "red"
 },
 text: {
 marginleft: 35,
 margintop: 10,
 fontsize: 16
 }
});
module.exports = input;

在index.ios.js文件中代码更改为:

import react, { component } from 'react';
import {
 appregistry,
 stylesheet,
 text,
 view
} from 'react-native';
var input = require("./input");
var inputtest = react.createclass({
 render () {
 return (
  <view>
  <input/>
  </view>
 )
 }
});
appregistry.registercomponent('usecomponent', () => inputtest);

最后效果:

React-Native中一些常用组件的用法详解(一)

image组件

一个用于显示多种不同类型图片的react组件,包括网络图片、静态资源、临时的本地图片、以及本地磁盘上的图片(如相册)等。

静态图片加载

直接引入,代码如下: <image source={require(‘./my-icon.png')} />

网络图片加载

注意:网络图片请求http请求的xcode需要做一个设置info.plist里的allow arbitrary loads后面的no改成yes。
通过source指定图片地址,代码如下: <image source=(注意这里要双花括号,因为特殊原因只能显示单花括号){uri: ‘https://facebook.github.io/react/img/logo_og.png'}(注意这里要双花括号,因为特殊原因只能显示单花括号)/>

示例

创建一个image.js的文件,在保存一张图片至本地,这里为1.png

里面代码为:

import react, { component } from 'react';
import {
 appregistry,
 stylesheet,
 text,
 view,
 image
} from 'react-native';
var imagetest = react.createclass({
 render () {
 return (
  <view style={styles.container}>
  <view style={styles.common}>
   <image source={{uri:"http://i1.sanwen8.cn/doc/1609/852-160912105q2i6.jpg"}} style={styles.netimg}></image>
  </view>
  <view style={styles.common}>
   <image source={require("./1.png")} style={styles.localimg}></image>
  </view>
  </view>
 )
 }
});
var styles = stylesheet.create({
 container: {
 margin: 10,
 margintop: 25,
 alignitems: "center"
 },
 common: {
 width: 280,
 height: 250,
 backgroundcolor: "cyan",
 justifycontent: "center",
 alignitems: "center",
 marginbottom: 10
 },
 netimg: {
 width: 280,
 height: 220
 },
 localimg: {
 width: 200,
 height: 200
 }
});
module.exports = imagetest;

在index.ios.js文件中代码更改为:

import react, { component } from 'react';
import {
 appregistry,
 stylesheet,
 text,
 view
} from 'react-native';
var imagecomponent = require("./image");
var imagetest = react.createclass({
 render () {
 return (
  <view>
  <imagecomponent/>
  </view>
 )
 }
});
appregistry.registercomponent('usecomponent', () => imagetest);

最后效果:

React-Native中一些常用组件的用法详解(一)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。