【问题标题】:I am not able to setState in React Native我无法在 React Native 中设置状态
【发布时间】:2019-01-30 11:29:07
【问题描述】:

在这个项目中,我想使用从firebase 数据库中检索到的数据来设置userType 的状态。从firebase 获取工作正常,但我无法从那里设置userType 的状态

我已经尝试过了
this.setState=({userType:snapshot.val()})
this.state=({userType:snapshot.val()})

    import React from 'react';
    import { StyleSheet, Text, View, TouchableOpacity, TextInput, Image } from 'react-native';
    import * as firebase from 'firebase';


    export default class Home extends React.Component {
      constructor(props){
        super(props)
        this.state=({
          userId:firebase.auth().currentUser.uid,
          userType:'f'
        })
      }
      componentDidMount() {
        this.readUserData();
      };
      readUserData=()=> {
        userstype= 'users/'+ this.state.userId + '/userType'

        firebase.database().ref(userstype).on('value', function (snapshot) {
          this.setState=({userType:snapshot.val()})
        });

          alert(this.state.userType)
        }


      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>
          </View>
          )}}

【问题讨论】:

  • 您正在改变 setState 而不是调用它。就做this.setState({ userType: snapshot.val() })
  • @AsafDavid 仍然显示错误
  • 我修好了。现在它工作正常 readUserData=()=> { userstype= 'users/'+ firebase.auth().currentUser.uid + '/userType' firebase.database().ref(userstype).once('value')。然后(快照 => { this.state=({ uType: snapshot.val() }) })
  • 您不应重新分配this.state。阅读此reactjs.org/docs/state-and-lifecycle.html#using-state-correctly

标签: android reactjs react-native setstate


【解决方案1】:

我已经更新了你的 setState 方法

试试下面的代码

 import React from 'react';
 import { StyleSheet, Text, View, TouchableOpacity, TextInput, Image } from 'react-native';
 import * as firebase from 'firebase';


    export default class Home extends React.Component {
      constructor(props){
        super(props)
        this.state=({
          userId:firebase.auth().currentUser.uid,
          userType:'f'
        })
      }
      componentDidMount() {
        this.readUserData();
      };
      readUserData=()=> {
        userstype= 'users/'+ this.state.userId + '/userType'

        firebase.database().ref(userstype).on('value', function (snapshot) {
          this.setState({userType:snapshot.val}, () => {
            alert(this.state.userType)
          })
        });


        }


      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>
          </View>
          )}}

希望这对你有用! 谢谢

【讨论】:

  • 它产生并且错误 undefined is not a function firebase.database().ref(userstype).on('value', function (snapshot) { this.setState({userType:snapshot.val} , () => { alert(this2.state.userType) })
  • 这个错误来自firebase而不是我们这边尝试解决这个@
  • 我修好了。现在它工作正常 readUserData=()=> { userstype= 'users/'+ firebase.auth().currentUser.uid + '/userType' firebase.database().ref(userstype).once('value')。然后(快照 => { this.state=({ uType: snapshot.val() }) })
  • 伟大的@SvdKs :) 我的回答对你有帮助吗?
  • 很高兴听到 :)
猜你喜欢
  • 2021-04-27
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-23
  • 2020-11-18
  • 1970-01-01
相关资源
最近更新 更多