props和state使用场景



props和state使用场景



 props介绍



在reactnative当中,我们经常会对一个组件进行复用,或者在一个父组件中包裹多个子组件,这时候,我们会遇到二个问题,父、子组件如何完成通信呢?怎么对一个子组件进行重复使用?为了解决这2个问题,props因此而生。


 如何通过prpos来进行复用子组件




import React, { Component } from 'react';
import { Text, View } from 'react-native';


class Greeting extends Component {
  render() {
    return (
      <Text>Hello {this.props.name}!</Text>
    );
  }
}


export default class LotsOfGreetings extends Component {
  render() {
    return (
      <View style={{alignItems: 'center'}}>
        <Greeting name='Rexxar' />
        <Greeting name='Jaina' />
        <Greeting name='Valeera' />
      </View>
    );
  }
}


  首先看这个官方文档给的案例,我们在Greeting组件中将name作为一个属性来定制,这样可以复用这一组件来制作各种不同的“问候语”。通过传给不同的props的值来对同一组件有不同的变化。




 state介绍



上文讲了props,看完了上篇,其实你会感觉到props讲的都是父组件对子组件的控制,那么还需要来对自身变化进行判断,那就是state。


我们使用两种数据来控制一个组件:props和state。props是在父组件中指定,而且一经指定,在被指定的组件的生命周期中则不再改变。 对于需要改变的数据,我们需要使用state。


一般来说,你需要在constructor中初始化state,然后在需要修改时调用setState方法。


以下通过一个开关来控制背景变化的demo来讲解



import React, { Component } from 'react';
import { View, StyleSheet, TouchableOpacity, } from 'react-native';


export default class HomeView extends Component {


  constructor(props) {
    super(props);
    this.state = { isPoweron: false };


    this.onPowerClick = this._onPowerClick.bind(this);
  }


  _onPowerClick() {
    this.setState({
      isPoweron: !this.state.isPoweron
    });
  }


  render() {
    return (
      <View style={this.state.isPoweron ? styles.Poweron : styles.Poweroff}>
        <TouchableOpacity
          style={styles.btnstyle}
          onPress={this.onPowerClick}
        />
      </View>
    );
  }


}


const styles = StyleSheet.create({
  Poweron: {
    flex: 1,
    backgroundColor: 'white',
    justifyContent: 'center',
    alignItems: 'center',
  },
  Poweroff: {
    flex: 1,
    backgroundColor: 'black',
    justifyContent: 'center',
    alignItems: 'center',
  },
  btnstyle: {
    width: 40,
    height: 40,
    backgroundColor: 'red',
  },
});





这个demo通过改变状态来改变背景的变化,state的使用还是很简单的。针对不同的业务需求制定不同的state,同样的state不仅支持bool型,还支持number类型等等。


小结



通过上文的浏览,想必大家都已经有模糊的概念了,乘热打铁大家来对看过的知识进行下吸收。


state的主要作用是用于组件保存、控制、修改自己的可变状态。state在组件的constructor中进行初始化,可以被自身修改,而外部不能访问也不能修改。你可以认为state是一个局部的、只能被自身控制的数据源。我们只需要在相应操作下使用this.setstate方法进行更新,setState会导致组件重新渲染(在下一篇文章中会介绍react-native的生命周期)。


props的主要作用是让使用该组件的父组件可以传入参数来配置子组件。它是外部传进来的配置参数,组件内部无法控制也无法渲染。除非外部组件主动传入新的props(通过redux也算外部传值)。


state和props紧密相连。一个组件可以使用外部传入的 props 来初始化自己的 state。但是它们的职责其实非常明晰分明:
state 是让组件控制自己的状态,props 是让外部对组件自己进行配置

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值