为什么我不能将输入数据保存到AsyncStorage?

时间:2018-10-05 00:06:08

标签: javascript react-native

我正在尝试使用AsyncStorage将用户输入的数据保存到本地设备。 我遵循了一些这样的示例,例如复制粘贴并进行了一些更改。 因为我是初级工程师,所以我无法完全理解这些代码的含义。

但是我不能。

除此之外,我不想使用Redux。 哪个错了?

下面的代码是我的代码。

state = {
  fullname: '';
}

componentDidMount() {
AsyncStorage.getItem('inputText')
  .then((value) => {
    if (value !== null) {
      this.setState({ fullname: value });
    }
  });

}

 handleOnpress() {
const db = firebase.firestore();
const { currentUser } = firebase.auth();
db.collection(`users/${currentUser.uid}/form1`).add({
  form1 : [
    { fullname: this.state.fullname },
 })
  .then(() => {
    this.props.navigation.goBack();
  })
  .catch((error) => {
    console.log(error);
  });
}

render() {
 return (
   <ScrollView style={styles.container}>
     <InfoHeader navigation={this.props.navigation}>
       申請者情報1 
     </InfoHeader>
     <Notes />
     <QuestionTextSet
        onChangeText={(text) => {
        this.setState({ fullname: text });
        AsyncStorage.setItem('inputText', text);
      }}
      placeholder={'例:留学太郎'}
      value={this.state.fullname}
      editable = {true}
     >
      姓名(漢字表記)
     </QuestionTextSet>

1 个答案:

答案 0 :(得分:0)

如果您使用AsyncStorage.setItem('inputText', text); 可能是捕获错误,未定义不是setItem函数参数中的回调函数。

所以您应该使用AsyncStorage.setItem('inputText', text, (e)=>{});

一旦您要存储对象,请使用:

AsyncStorage.setItem('key', JSON.stringify(object), (e)=>{});

并通过以下方式获取它:

AsyncStorage.getItem('key', (e, v) => {
      if (!e) {
        /**
         * your value 
         */
        const object = JSON.parse(v);
      }
    });