sur mon application native réactive que je développe cela.Setate ne fonctionne pas et ne mettant pas à jour la valeur dans le constructeur. Mais cela fonctionne ({}) fonctionne. Mais lorsque j'utilise que c'est réinitialiser le constructeur, tout le monde veuillez pointer ce qui ne va pas dans ce code
import React from 'react'; import { StyleSheet, Text, View, TouchableOpacity, TextInput, Image } from 'react-native'; import { RkTextInput, RkButton } from 'react-native-ui-kitten'; import * as firebase from 'firebase'; export default class Home extends React.Component { constructor(props) { super(props) this.state = { uType: 'normal', AdminNavbutton: '' } } ProfileSubmithandler = () => { alert(this.state.uType + " " + this.state.AdminNavbutton) } componentDidMount() { this.readUserData(); } readUserData = () => { userstype = 'users/' + firebase.auth().currentUser.uid + '/userType' firebase.database().ref(userstype).once('value').then(snapshot => { this.setState({ uType: snapshot.val() }) // notworking and not updating uType alert(snapshot.val()) //working Properly }) } emailid = () => { } render() { return ( <View style={styles.container}> <Text style={styles.titleText}>Taams</Text> <Text style={styles.edition}>Developer's Edition</Text> <Text style={styles.titleText}>Home</Text> <Text>Alpha 0.0.0.1</Text> <RkButton onPress={() => this.ProfileSubmithandler()}> <Text style={styles.LoginButtonText}>Submit</Text> </RkButton> <TouchableOpacity onPress={() => this.props.navigation.navigate(this.state.AdminNavbutton)}><Text style={styles.signinButton}>Profile</Text></TouchableOpacity> </View> ); } }
3 Réponses :
Lorsque Si vous allez utiliser votre valeur tout de suite Dans votre fonction, vous devez le mettre dans une autre variable: p> this.setstate () code> est asynchrone, votre valeur mise à jour sera désormais disponible juste après l'appeler.
SetState () code> est effectué la mise à jour de votre valeur, Vous pourrez accéder aux données mises à jour de votre fonction
rendu code> sous
this.type.type code>. p>
SetState Code> Fournit le rappel comme deuxième argument, au cas où vous souhaitez vérifier la valeur en état après la mise à jour de l'état.
Bien sûr, c'est une autre alternative.
@Treycos et a également amélioré mon réact et réagir des versions natives
C'est à cause du problème d'asyncrouse dans la consigne. Laissez le bouton indiqué lorsque les données extraites de Firebase et des états deviennent définies. Vous êtes ici:
import React from 'react'; import { StyleSheet, Text, View, TouchableOpacity, TextInput, Image } from 'react-native'; import {RkTextInput, RkButton } from 'react-native-ui-kitten'; import * as firebase from 'firebase'; export default class Home extends React.Component { constructor(props){ super(props) this.state={ uType:'normal', AdminNavbutton:false, } } ProfileSubmithandler=()=>{ alert(this.state.uType + " " + this.state.AdminNavbutton) } componentDidMount() { this.readUserData(); }; readUserData=()=> { userstype= 'users/'+ firebase.auth().currentUser.uid + '/userType' firebase.database().ref(userstype).once('value').then(snapshot => { this.setState({ uType: snapshot.val() }) // notworking and not updating uType alert(snapshot.val()) //working Properly }) } emailid=()=>{ } render() { return ( <View style={styles.container}> <Text style={styles.titleText}>Taams</Text> <Text style={styles.edition}>Developer's Edition</Text> <Text style={styles.titleText}>Home</Text> <Text>Alpha 0.0.0.1</Text> { this.state.AdminNavbutton && <RkButton onPress = {()=>this.ProfileSubmithandler()}> <Text style={styles.LoginButtonText}>Submit</Text> </RkButton> <TouchableOpacity onPress={()=>this.props.navigation.navigate(this.state.AdminNavbutton)}><Text style={styles.signinButton}>Profile</Text></TouchableOpacity> } </View> ); } }
amélioré mon réactez et réagissez des versions natales qui ont corrigé mes problèmes
Vous avez oublié de déclarer une variable pour "usersType" - ligne 25 p>
Amélioré mon réactez et réagissez des versions natales qui ont corrigé mes problèmes