如何从保存在AsyncStorage中的对象中获取项目?

时间:2019-06-04 18:47:57

标签: javascript reactjs react-native async-await react-redux

我保存了一个包含用户数据(如电子邮件,用户名等)的对象。

我使用AsyncStorage来保存它们, 当我得到它们时,我在登录或在textInput中使用它时只看到一个字符串 那么如何处理此问题并仅获取我保存的Just Email或Just Username之类的特定数据?

我的代码

注册

 const {
      username,
      email,
      city,
      mobileNumber,
    } = this.state;

  const profileData = {
        "username": username,
        "email": email,
        "city": city,
        "mobileNumber": mobileNumber
      }
 firebase
        .auth()
        .createUserWithEmailAndPassword(email, password)
        .then(async user => {
          firebase
            .database()
            .ref(`users/${user.user.uid}`)
            .set({
              username: username,
              type: type,
              email: email,
              city: city,
              mobileNumber: mobileNumber,
              token: fcmToken
            });
          this.props.navigation.navigate("Home");
          await AsyncStorage.setItem('@MyProfile:data', JSON.stringify(profileData)).then(() => console.log("Saved"));
        }).catch(err => console.log(err));

个人资料屏幕

async componentDidMount() {
        try {
            await AsyncStorage.getItem('@MyProfile:data')
                .then(data => this.setState({ data }))
                .catch(error => console.log('@error' + error));

                console.log(this.state.data); // 
        } catch (error) {
            console.log("@CError", error);
        }
    }

render(){
return(
   <View style={styles.logoSection}>
                                {/* <SvgComponent height={100} /> */}
                                <Icon name="ios-contact" size={90} color='#4d8dd6' style={{ marginTop: 9 }} />

                                <Text style={{ fontSize: 18, color: "#000", margin: 35, marginTop: 7 }}>{this.state.data}</Text> // i wnat just display username here from storage
                            </View>
)
}

控制台

  console.log(this.state.data); 
  

我认为是一个字符串:{“ username”:“ user”,“ email”:“ user@user.us”,“ city”:“ usercity”,“ mobileNumber”:“ 0597979979”}

1 个答案:

答案 0 :(得分:0)

{this.state.data.username}{this.state.data['username']}

但是在{this.state.data}中的这一行中,您可能不会在第一个渲染中访问用户名,也许this.state.data将为空,所以您需要在使用this.state.data['username']之前进行验证!