[关闭]
@yzzer 2020-05-20T18:22:24.000000Z 字数 1388 阅读 341

React Native 组件属性 props

前面只是粗略地了解了下 组件属性 props

现在详细介绍 组件属性 props 以及如何将属性状态 state 和属性组件 props 组合在一起使用。

组件的调用者可以通过 属性 将数据传递给组件,然后组件内部可以通过 组件属性 props 来获取调用者传递的数据。

调用者通过属性传递数据

  1. <SiteNameComponent onPress={this.updateState} name={name} />

组件内部通过组件属性 props 来获取传递给组件的数据

  1. const SiteNameComponent = (props) => {
  2. return (
  3. <View>
  4. <Text onPress = {props.onPress}>
  5. {props.name}
  6. </Text>
  7. </View>
  8. )
  9. }

因为数据可以通过属性来传递,组件可以没有状态,不用状态来保存任何中间数据。对于没有状态的组件,我们称之为 表现组件

因此我们可以将组件分为两大类:

  1. 容器组件

    容器组件是普通的组件,使用 ES6 类 来实现,既包括组件属性,也包含 组件状态

    最重要的是 容器组件有自己的状态和行为处理函数

  2. 纯表现组件

    纯表现组件只用于展现数据,数据来源可以是写死的固定不变的,也可以是通过属性传递给组件的。

    纯表现组件没有自己的内部状态,所有数据都因为外部而变。

容器组件

容器组件是最普通的组件,使用 ES6 类 来实现,既包括组件属性,也包含组件状态。

使用原则

  1. 如果一个组件需要更新自己的状态,那么该组件就是容器组件。
  2. 容器组件有着自己的状态 state,也可以通过属性 props 接收外部的数据来更新自己的状态。
  3. 如果不需要保存状态,建议不要使用容器组件。

范例

容器组件是最普通的组件, React Native 内置的大部分组件都是容器组件,它们多有一个 state 来保存状态。

下面的代码,我们使用容器组件来实现站点名称的展示,我们通过属性将外部数据作为初始值传递给组件,然后组件自己内部处理用户的点击。

  1. import React, { Component } from 'react'
  2. import { Text, View, StyleSheet,Alert} from 'react-native'
  3. class SiteNameComponent extends React.Component {
  4. constructor(props) {
  5. super(props)
  6. this.state = { name: props.name }
  7. }
  8. updateState = () => {
  9. const name = this.state.name == 'yzzer' ? 'yzzer,yzzer' : 'yzzer'
  10. this.setState({name:name})
  11. }
  12. render() {
  13. const { name } = this.state
  14. return (
  15. <View>
  16. <Text onPress={this.updateState}>{name}</Text>
  17. </View>
  18. )
  19. }
  20. }
  21. export default class App extends React.Component {
  22. render() {
  23. return (
  24. <View style={styles.container}>
  25. <SiteNameComponent name={'yzzer'} />
  26. </View>
  27. )
  28. }
  29. }
  30. const styles = StyleSheet.create ({
  31. container: {
  32. margin:10
  33. },
  34. })
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注