Sök…


Syntax

  • void setState (funktion | objekt nextState, [function callback])

sets

För att ändra vy i din applikation kan du använda setState - detta kommer att återge din komponent och alla dess underordnade komponenter. setState utför en grund sammanslagning mellan det nya och tidigare tillståndet och utlöser en återgivning av komponenten.

setState tar antingen ett nyckelvärdeobjekt eller en funktion som returnerar ett nyckelvärdeobjekt

Nyckel-värdeobjekt

this.setState({myKey: 'myValue'});

Fungera

Att använda en funktion är användbar för att uppdatera ett värde baserat på befintligt tillstånd eller rekvisita.

this.setState((previousState, currentProps) => {
    return {
        myInteger: previousState.myInteger+1
    }
})

Du kan också skicka en valfri återuppringning till setState som kommer att avfyras när komponenten har återgivits med det nya tillståndet.

this.setState({myKey: 'myValue'}, () => {
    // Component has re-rendered... do something amazing!
));

Fullständigt exempel

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

export default class MyParentComponent extends Component {
  constructor(props) {
    super(props);

    this.state = {
      myInteger: 0
    }

  }
  getRandomInteger() {
    const randomInt = Math.floor(Math.random()*100);

    this.setState({
      myInteger: randomInt
    });

  }
  incrementInteger() {
    
    this.setState((previousState, currentProps) => {
      return {
        myInteger: previousState.myInteger+1
      }
    });

  }
  render() {

    return <View style={styles.container}>
      
      <Text>Parent Component Integer: {this.state.myInteger}</Text>

      <MyChildComponent myInteger={this.state.myInteger} />

      <Button label="Get Random Integer" onPress={this.getRandomInteger.bind(this)} />
      <Button label="Increment Integer" onPress={this.incrementInteger.bind(this)} />

    </View>

  }
}

export default class MyChildComponent extends Component {
  constructor(props) {
    super(props);
  }
  render() {
    
    // this will get updated when "MyParentComponent" state changes
    return <View>
      <Text>Child Component Integer: {this.props.myInteger}</Text>
    </View>
    
  }
}

export default class Button extends Component {
  constructor(props) {
    super(props);
  }
  render() {

    return <TouchableOpacity onPress={this.props.onPress}>
        <View style={styles.button}>
          <Text style={styles.buttonText}>{this.props.label}</Text>
        </View>
      </TouchableOpacity>
    
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
  button: {
    backgroundColor: '#444',
    padding: 10, 
    marginTop: 10
  },
  buttonText: {
    color: '#fff'
  }
});

AppRegistry.registerComponent('MyApp', () => MyParentComponent);

Initiera staten

Du bör initiera tillstånd inuti konstruktionsfunktionen för din komponent så här:

export default class MyComponent extends Component {
  constructor(props) {
    super(props);
    
    this.state = {
      myInteger: 0
    }
  }
  render() {
    return  (
      <View>
        <Text>Integer: {this.state.myInteger}</Text>
      </View>
    )
  }
}

Med setState kan man uppdatera vyn.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow