React Native从零开始(三)Props(属性)和State(状态)
来源:互联网 发布:逆战原子0.19秒宏数据 编辑:程序博客网 时间:2024/05/29 01:53
React Native从零开始(三)Props(属性)和State(状态)
一、Props(属性)
props是组件自身的属性,一般用于嵌套的内外层组件中,负责传递信息(通常由父层组件向子层组件传递)
注意:props对象中的属性与组件的属性一一对应,不要直接去修改props中属性的值
注意:props对象中的属性与组件的属性一一对应,不要直接去修改props中属性的值
因为官网上已经有了他的基本使用方法,但是可能还是不能够很好的理解Props属性,那么可以看一看下面的使用示例。
1、父组件向子组件参数的传递
首先创建两个自定义的组件ChildName和ChildTel
class ChildName extends Component{ render(){ return( <Text>{this.props.name}</Text> ); }}class ChildTel extends Component{ render(){ return( <Text>{this.props.tel}</Text> ); }}
这里的{this.props.tel},{this.props.name},是这两个子控件的属性。然后我们创建一个父组件包含这两个子组件,然后利用这个父组件像子组件传递数据
class Child extends Component{ render(){ return( <View> <ChildName name={this.props.ChildName}/> <ChildTel tel={this.props.ChildTel}/> </View> ); }}
这里的name和tel是子组件的属性,然后我们用父组件的属性传递给子组件,那么父组件的属性就是ChildName和ChildTel。也就是说我们设置父组件的属性时那么他的子组件props属性也会被赋值。
return ( <Child ChildName="小明" ChildTel="18912345678"/> );
最后的效果如下:
2、...this.props的使用
是props提供的语法糖,可以将父组件的全部属性复制给子组件,也就是说我们不需要为子组件设置属性,利用这个将会把父组件的属性赋予给子组件
PersonClick (){ alert("点击效果"); } constructor(props) { super(props); } render() { return ( <Person name="小明" tel="18912345678" onPress={this.PersonClick}/> ); }
这个时候我们看到父组件有一个函数是alert输出个字符串,如果我们不使用...this.props那么点击控件,不会有点击效果
render(){ return( <Text >{this.props.name}</Text> ); }
那么我们加上这句话再来点击可以有点击效果
render(){ return( <Text {...this.props}>{this.props.name}</Text> ); }
3.this.props.childer
childer是一个例外不是跟组件的属性对应的。表示组件的所有子节点。
因为列表或者控件中的子控件数目,不确定,所以我们需要遍历children,逐项进行设置,使用React.Childer.map方法
返回值:数组对象。
子控件
render(){ return( <View> { React.Children.map(this.props.children,function (child) { return ( <View>{child}</View> ); }) } </View> ); }
render() { return ( <Person> <Text>小明</Text> <Text>18812345678</Text> <Text>12岁</Text> </Person> ); }
4、设置组件属性的默认值
就是组件在不设置属性的值的时候为其设置一个默认的值ES6语法下的
render() { return ( <Person/> ); }
子控件
static defaultProps={ name:'xxxx', }; render(){ return( <Text>{this.props.name}</Text> ); }
这个时候的显示效果是
二、State(状态)
我们使用两种数据来控制一个组件:props和state。props是在父组件中指定,而且一经指定,在被指定的组件的生命周期中则不再改变。 对于需要改变的数据,我们需要使用state。
一般来说,你需要在constructor中初始化state(译注:这是ES6的写法,早期的很多ES5的例子使用的是getInitialState方法来初始化state,这一做法会逐渐被淘汰),然后在需要修改时调用setState方法。
一般来说,你需要在constructor中初始化state(译注:这是ES6的写法,早期的很多ES5的例子使用的是getInitialState方法来初始化state,这一做法会逐渐被淘汰),然后在需要修改时调用setState方法。
官网的例子写的很容易理解
import React, { Component } from 'react';import { AppRegistry, Text, View } from 'react-native';class Blink extends Component { constructor(props) { super(props); this.state = { showText: true }; // 每1000毫秒对showText状态做一次取反操作 setInterval(() => { this.setState({ showText: !this.state.showText }); }, 1000); } render() { // 根据当前showText的值决定是否显示text内容 let display = this.state.showText ? this.props.text : ' '; return ( <Text>{display}</Text> ); }}class BlinkApp extends Component { render() { return ( <View> <Blink text='I love to blink' /> <Blink text='Yes blinking is so great' /> <Blink text='Why did they ever take this out of HTML' /> <Blink text='Look at me look at me look at me' /> </View> ); }}AppRegistry.registerComponent('BlinkApp', () => BlinkApp);
效果如下
1 0
- React Native从零开始(三)Props(属性)和State(状态)
- React Native入门(三)之Props(属性)和State(状态)
- React Native探索(三)组件的Props(属性)和State(状态)
- React Native 学习笔记(四)-- State和Props
- React Native State和Props
- [React-Native]Props和State
- React-Native 基础(三) 使用State改变状态
- React Native开发】React Native 基础之Props(属性)与State(状态)使用讲解
- react and redux(一)props和state
- react系列(4)props和state介绍
- react中props和state属性
- React Native从零开始(二)Flexbox布局,和布局属性
- react native学习笔记6——Props和State
- 简述React Native中的state,props和成员变量
- react-native的props和state的使用
- React Native(二):属性、状态
- React--Components and Props(组件和属性组件)
- React学习(二)props属性
- Storm实战常见问题及解决方案
- 【微服务那些事】Microservices场景下的持续部署
- LeetCode- 167. Two Sum II - Input array is sorted - 思路详解- C++
- C#80课的主要内容
- java实现UDP请求
- React Native从零开始(三)Props(属性)和State(状态)
- Sed&awk笔记之awk
- powerdesigner 添加Comment注释
- Hive CLI
- 使用android Studio时,在没有Activity入口,想要编译代码
- MapReduce 中的类
- 纯素数(easy)
- iOS 如何完整复制另一个视图控制器的内容
- 润乾报表如何在工具栏中增加总记录数和本页记录数显示