前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >React Native探索之组件的属性和状态

React Native探索之组件的属性和状态

作者头像
用户1269200
发布于 2018-10-25 02:48:18
发布于 2018-10-25 02:48:18
2.2K00
代码可运行
举报
文章被收录于专栏:刘望舒刘望舒
运行总次数:0
代码可运行

前言

Android或者iOS开发中我们会用到很多控件,这些控件会有很多的属性、样式等等。同样的,React Native中的组件也有属性、样式和状态。

1.Props(属性)

组件创建时会设置一些参数来定制这个组件,这些参数就是属性,属性一旦设定,在组件的生命周期中就不会改变。下面拿Image的source属性和Text的onPress属性作为举例。

Image的source属性
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React, {Component} from 'react';
import {AppRegistry, Image} from 'react-native';
class ImageSourceApp extends Component {
    render() {
        let pic = {
            uri: 'http://olwwjaqhc.bkt.clouddn.com/gongzhong.jpg'
        };
        return (
            <Image source={pic} style={{width: 200, height: 200}}/>//1
        );
    }
}
AppRegistry.registerComponent('firstProject', () => ImageSourceApp);

在注释1处用Image的source属性来指定要显示的图片的地址,{}中可以放一个js变量或表达式,需要执行后取值,这里将图片的地址pic放到{}中。紧接着用style属性来设置图片大小,关于style属性,后面会介绍它。运行效果如下图所示。

Text的onPress属性

接着拿我们熟悉的Text来做举例,如下所示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React, {Component} from 'react';
import {AppRegistry, Text, Alert} from 'react-native';
class TextPressApp extends Component {
    render() {
        return (
            <Text onPress={onTextPress}>点击文本</Text>//1
        );
    }
}
const onTextPress = () => {
    Alert.alert('弹出框');
};
AppRegistry.registerComponent('firstProject', () =>  TextPressApp);

注释1处的onPress就是Text的属性,除了onPress,Text还有很多其他的属性,比如numberOfLines、onLayout和style等等。{}放入了onTextPress函数,它是一个箭头函数,作用就是return一个Alert,它等价于如下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function onTextPress() {
    return Alert.alert('弹出框');
};

好了我们运行程序,当我们点击Text组件时会弹出Alert,如下图所示。

style属性

在React Native中所有的核心组件都接受名为style的属性,用来定于组件的样式,我们将上面的Text示例代码中加入style属性,如下所示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
...
class TextPressApp extends Component {
    render() {
        return (
            <Text style={{color: 'blue'}} onPress={onTextPress}>点击文本</Text>
        );
    }
}
...

再运行程序,就会发现"点击文本"变为蓝色了。在实际开发中,style属性会变得越来越复杂,因此我们可以使用StyleSheet.create来集中定义组件的样式。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React, {Component} from 'react';
import {AppRegistry, Text, Alert, StyleSheet, View} from 'react-native';
class TextPressApp extends Component {
    render() {
        return (
            <View>//2
                <Text style={styles.largeblue} onPress={onTextPress}>点击文本</Text>
                <Text style={styles.green}> 第二行</Text>
            </View>
        );
    }
}
const styles = StyleSheet.create({//1
    largeblue: {
        color: 'blue',
        fontSize: 28,
        fontWeight: 'bold',
    },
    green: {
        color: 'green',
        fontSize: 18,
    },
});
const onTextPress = () => {
    Alert.alert('弹出框');
};
AppRegistry.registerComponent('firstProject', () => TextPressApp);

在注释1处通过StyleSheet.create创建了一个样式表,我们在Text中使用样式表就可以了。在注释2处用到了view组件,它是一个基础组件支持Flexbox布局、样式和一些触摸处理等,可以放到其他视图里也可以包含子视图。View组件在Android、iOS和Web中,分别对应View、UIView和<div>。 我们运行程序,效果如下图所示。

2.State(状态)

组件的属性设置完毕后,在组件的生命周期中就不会改变,如果想要改变属性,我们可以使用State,例子如下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React, {Component} from 'react';
import {AppRegistry, Text, View} from 'react-native';
class Flash extends Component {
    constructor(props) {//1
        super(props);
        this.state = {showText: true};//2
        setInterval(() => {
            this.setState({showText: !this.state.showText});
        }, 1000);//3
    }
    render() {
        let display = this.state.showText ? this.props.text : '';//4
        return (
            <Text style={{color: 'blue'}}>{display}</Text>
        );
    }
}
class FlashApp extends Component {
    render() {
        return (
            <View style={{alignItems: 'center'}}>
                <Flash text='蓝色闪光'/>//5
            </View>
        );
    }
}
AppRegistry.registerComponent('firstProject', () => FlashApp);

我们自定义了Flash组件,在注释1处定义了constructor构造方法,注释2处做了初始化state的工作,默认showText的值为true。注释3处调用setInterval方法,每隔1000毫秒对showText的值进行取反,使得showText的值不断在true和false之间切换。注释4处通过showText的值来控制文本的显示,如果showText为true,则通过this.props.text来获取Flash组件的text属性的值。最后在注释5处使用我们自定义的Flash组件,将text作为Flash组件的属性并设值。运行效果如下所示。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 刘望舒 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
css 布局之 4种 position 布局讲解
left,top 属性可以理解为 div 左上角为基准移动 right,bottom 属性可以理解为 div 右下角为基准移动
Gorit
2021/12/08
9080
css 布局之 4种 position 布局讲解
【CSS】布局属性:position
前面说到,被设置了float的元素无法使用left、top、right、bottom等位置属性。 那么什么情况下可以用位置属性呢?
毛大姑娘
2021/04/26
5500
web前端技术讲解之CSS中position的定位技术
使用position定位有四种方式,分别为absolute、relative、static、fixed,static是静态定位,也为系统自动定位。下面主要分析其他三种定位方式的特点。
全栈程序员站长
2021/06/22
9140
web前端技术讲解之CSS中position的定位技术
CSS魔法堂:Position定位详解
一、Position各属性值详解                       1.  static :默认值,元素将按照正常文档流规则排列。   2.  relative :相对定位,元素仍然处于正常文档流当中,但可以通过left、top、right和bottom的CSS规则来改变元素的位置。        注意点:[a]. 元素原来位置将保留,不被其他元素所占据;                      [b]. 当使用left,top改变元素位置时,元素将以原来位置的border外边框的左上角作为
^_^肥仔John
2018/01/18
5790
带你走进CSS定位详解
语法:z-index:auto | number 取值:auto:默认值,number:无单位的整数值,可负数。
达达前端
2019/07/03
4170
带你走进CSS定位详解
深入CSS,让网页开发少点“坑”
 通常我们在学习CSS的时候,感觉语法很容易掌握,实际应用中却碰到各式各样难以填补的“坑”,为避免大家受到同样的困惑与不解,本文详细讲解了CSS中优先级和Stacking Context等高级特性。让你更深入了解CSS。 CSS 优先级 优先级是浏览器是通过判断哪些属性值与元素最相关以决定并应用到该元素上的。优先级仅由选择器组成的匹配规则决定的。如果给一个P标签增加一个类(Class),运行后Class 中的部分属性并未发生改变,及CSS选择器存在优先级问题。 选择符优先级 常见的选择器种类: 内联样式
葡萄城控件
2018/01/10
8960
深入CSS,让网页开发少点“坑”
css position:static 的使用
relative(相对定位) 对象不可层叠、不脱离文档流,参考自身静态位置通过top,bottom,left,right定位,并且可以通过z-index进行层次分级
tianyawhl
2019/04/04
9010
css position:static  的使用
(2019)[前端]面试题[10]:CSS display和position的属性值有哪些?
题外话:新网站( https://www.lzpan.com )懒盘,百度云、蓝奏云资源搜索,欢迎访问。
无道
2019/11/13
1.5K0
(2019)[前端]面试题[10]:CSS display和position的属性值有哪些?
前端基础——CSS+DIV布局
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/40559403
DannyHoo
2018/09/13
2.5K0
前端基础——CSS+DIV布局
CSS面试题
2.利用css3新增属性transform: translate(-50%,-50%);
全栈程序员站长
2022/09/04
4270
CSS面试题
css属性详解
一、字体属性 字体   font-family可以把多个字体名称作为一个“回退”系统来保存。如果浏览器不支持第一个字体,则会尝试下一个。浏览器会使用它可识别的第一个值。 body { font-family: "Microsoft Yahei", "微软雅黑", "Arial", sans-serif } 大小   可以通过font-size来说设置字体大小的像素值,如果设置成inherit表示继承父元素的字体大小值。 p { font-size: 16px; } 字重(粗细)  
人生不如戏
2018/04/12
2.1K0
css属性详解
css3的一些属性--position
定位:任何元素都可以定位 position:absolute;元素放置在你想的任意位置 不过绝对或固定元素会生成一个块级框,而不论该元素本身是什么类型。 position:relative; 相对定位元素会相对于它在正常流中的默认位置偏移 absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。 fixed 生成绝对定位的元素,相对于浏览器窗口进行定位。元素的位置通
wust小吴
2019/10/31
4940
Css 详细解读定位属性 position 以及参数
position 定位属性,是CSS中非常重要的属性。除了文档流布局,就是定位布局了。本来我对这个问题没有放在心上,毕竟写了这么多年的css,对position的各类使用是烂熟于心的。但是今天突然发现,居然很多人都不清楚position参数。因此,特地写这篇博文,详细解读一下position 以及参数。
FungLeo
2022/05/05
1.5K0
Css 详细解读定位属性 position 以及参数
五. css 布局之 position(定位)
包含块( containing block ) 正常情况下: 包含块就是离当前元素最近的祖先块元素,
小海怪的互联网
2020/10/26
2.2K0
[CSS] 对定位的深入理解与应用
注意:绝大多数情况下,相对定位,会与绝对定位配合使用。 **原因:**绝对定位的元素(即设置了 position: absolute; 的元素)相对于其最近的一个已定位的祖先元素进行定位。如果没有已定位的祖先元素,它将相对于浏览器窗口(即 body 元素)进行定位。 通过将父元素设置为相对定位(position: relative;),而将子元素设置为绝对定位(position: absolute;),可以使子元素的定位基于父元素,而不是整个页面。这使得布局更具可控性和可预测性。
DevKevin
2024/07/25
1460
[CSS] 对定位的深入理解与应用
css属性及定位操作
font-family可以把多个字体名称作为一个“回退”系统来保存。如果浏览器不支持第一个字体,则会尝试下一个。浏览器会使用它可识别的第一个值。
全栈程序员站长
2022/07/21
2.5K0
css属性及定位操作
前端学习(14)~css学习(八):定位属性
如果想做“压盖”效果(把一个div放到另一个div之上),我们一般不用相对定位来做。相对定位,就两个作用:
Vincent-yuan
2020/03/19
9650
【前端】CSS : position
正常的布局行为,即元素在文档常规流中当前的布局位置。此时top, right, bottom, left和 z-index 属性无效。
Gavin-ZYX
2019/03/04
1.1K0
【前端】CSS : position
【说站】css中position常见的四个属性值
一般来说,我们不需要特别声明它,但有时当我们遇到继承时,我们不愿意看到元素继承的属性影响本身,所以我们可以使用Position:static取消继承,即恢复元素定位的默认值。设置为static的元素总是位于页面流给出的位置(static元素会忽略任何top、bottom、left或right声明)。一般不常用。
很酷的站长
2022/11/23
8850
【说站】css中position常见的四个属性值
浮动清楚浮动及position的用法
static 默认值,无定位,不能当作绝对定位的参照物,并且设置标签对象的left、top等值是不起作用的的。
IT人一直在路上
2019/09/18
2.2K0
相关推荐
css 布局之 4种 position 布局讲解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档