React Native - Props

在上一章中,我们向您展示了如何使用可变的state。在本章中,我们将向您展示如何结合状态和props

展示组件应通过传递props来获取所有数据。只有容器组件才应该具有state

容器组件

现在我们将了解容器组件是什么以及它是如何工作的。

理论

现在我们将更新我们的容器组件。该组件将处理状态并将 props 传递给展示组件。

容器组件仅用于处理状态。所有与视图(样式等)相关的功能都将在演示组件中处理。

示例

如果我们想使用上一章中的示例,我们需要从渲染函数中删除 Text 元素,因为此元素用于向用户呈现文本。这应该在演示组件内。

让我们回顾一下下面给出的示例中的代码。我们将导入 PresentationalComponent 并将其传递给渲染函数。

导入 PresentationalComponent 并将其传递给渲染函数后,我们需要传递 props。我们将通过向 <PresentationalComponent> 添加 myText = {this.state.myTextdeleteText = {this.deleteText 来传递 props。现在,我们将能够在演示组件内部访问它。

App.js

import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
import PresentationalComponent from './PresentationalComponent'

export default class App extends React.Component {
   state = {
      myState: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, used do eiusmod
      tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
      nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis
      aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat
      nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui
      officia deserunt mollit anim id est laborum.'
   }
   updateState = () => {
      this.setState({ myState: 'The state is updated' })
   }
   render() {
      return (
         <View>
            <PresentationalComponent myState = {this.state.myState} updateState = {this.updateState}/>
         </View>
      );
   }
}

展示组件

现在我们将了解展示组件是什么以及它是如何工作的。

理论

展示组件应该仅用于向用户呈现视图。这些组件没有状态。它们将所有数据和函数作为 props 接收。

最佳实践是尽可能多地使用展示组件。

示例

正如我们在上一章中提到的,我们对展示组件使用 EC6 函数语法。

我们的组件将接收 props、返回视图元素、使用 {props.myText 呈现文本并在用户点击文本时调用 {props.deleteText 函数。

PresentationalComponent.js

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

const PresentationalComponent = (props) => {
   return (
      <View>
         <Text onPress = {props.updateState}>
            {props.myState}
         </Text>
      </View>
   )
}
export default PresentationalComponent

现在,我们拥有与 State 章节中相同的功能。唯一的区别是我们将代码重构为容器和展示组件。

您可以运行应用程序并查看文本,如以下屏幕截图所示。

React Native Props

如果您单击文本,它将从屏幕上删除。

React Native Props updated