[关闭]
@yzzer 2020-05-05T11:10:13.000000Z 字数 1867 阅读 487

React Native 组件状态 state

总所周知,React 组件的数据由 propsstate 两大部分组成。

propsstate 之间的共同点就是它们都是一个对象或者说一个字典 {}

它们之间也有着显著的区别。

本章节我们简单介绍下 stateprops 会在 React Native 组件属性 props 中介绍。

React Native 组件状态 state

组件状态 state 是一个 JavaScript 对象或字典 {}

初始化 state

在 ES6 时代,组件状态就是组件内部的一个变量。

初始化的方式有两种:

  1. 类的实例属性

    1. class App extends React.Component {
    2. state = {
    3. name: 'yzzer',
    4. site: 'www.yzzer.top'
    5. }
    6. }
  2. 在类的构造函数中初始化

    1. class App extends React.Component {
    2. constructor()
    3. {
    4. super()
    5. this.state = {
    6. name: '简单教程',
    7. site: 'https://www.twle.cn'
    8. }
    9. }
    10. }

使用 state

因为 state 是一个对象或者字典,因此读取 state 的值其实就是访问对象的属性。可以通过对象属性语法来访问 state 的值。

例如通过 this.state.name 访问名称,通过 this.state.site 访问站点网址。

但 React 中一般通过对象解析语法来访问 state,也就是通过下面的方式来获取 state 的值

  1. const {name,site} = this.state

这样能保证我们读取的状态值是 不可变的

例如

  1. import React, { Component } from 'react'
  2. import { Text, View, StyleSheet} from 'react-native'
  3. export default class App extends React.Component {
  4. state = {
  5. name: 'yzzer',
  6. site: 'https://www.yzzer.top'
  7. }
  8. render() {
  9. const {name,site} = this.state
  10. return (
  11. <View style={styles.container}>
  12. <Text>站点名称:{name}</Text>
  13. <Text>站点网址:{site}</Text>
  14. </View>
  15. )
  16. }
  17. }
  18. const styles = StyleSheet.create ({
  19. container: {
  20. margin:10
  21. },
  22. })

更新 state

React 提供了 this.setState({key:value}) 函数来更新状态 state。

setState() 函数的参数是一个对象或哈希表/字典,是要更新的键值对。

例如要把站点名称改成 简单教程,简单编程,则可以如下使用 setState()

  1. this.setState({name:'简单教程,简单编程'})

例如

  1. import React, { Component } from 'react'
  2. import { Text, View, StyleSheet} from 'react-native'
  3. export default class App extends React.Component {
  4. state = {
  5. name: '简单教程',
  6. site: 'https://www.twle.cn'
  7. }
  8. updateState = () => {
  9. const name = this.state.name == '简单教程' ? '简单教程,简单编程' : '简单教程'
  10. this.setState({name:name})
  11. }
  12. render() {
  13. const {name,site} = this.state
  14. return (
  15. <View style={styles.container}>
  16. <Text onPress={this.updateState}>站点名称:{name}</Text>
  17. <Text>站点网址:{site}</Text>
  18. </View>
  19. )
  20. }
  21. }
  22. const styles = StyleSheet.create ({
  23. container: {
  24. margin:10
  25. },
  26. })

运行

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注