【问题标题】:how to save username and password in cache ? react-native如何将用户名和密码保存在缓存中?反应式
【发布时间】:2019-02-28 16:43:58
【问题描述】:

我尝试将我的用户名和密码保存在缓存中。我无法保存两个数据,所以我尝试只在代码下方保存用户名。

但是当我向 TextInput 输入字母时,数据会转到

保存数据()

但是在这里,this.setState 不起作用,我不知道为什么。因为在渲染页面时,

console.log("mykey:", this.state.mykey);

给了我一个空的对象

这是代码

<View style={styles.ChildViewStyle}>

    <TextInput
        value = {this.state.mykey}
        placeholder= "Kullanıcı Adı"
        placeholderTextColor="#fff"
        onChangeText={(text) =>  this.savedata(text)}
        keyboardType='email-address'
        onSubmitEditing={() => this.passwordInput.focus()}
        style={styles.input}
    />

</View>

这是我的方法

savedata = (value) => {
    AsyncStorage.setItem("myKey", value);
    this.setState({myKey: value});

    console.log("deneme",value);
}

componentDidMount(){
    AsyncStorage.getItem("myKey").then((value) => {
        this.setState({myKey: value});
        console.log("didmounth : ", value)
    }).done();
}

另外如何保存用户名和密码这两个值?

【问题讨论】:

    标签: react-native


    【解决方案1】:

    您可以尝试将 json 存储为字符串,然后在 get 期间解析 json

    savedata = (username,password) => {
     let value = {'username' : username, 'password':password}   
     await AsyncStorage.setItem('myKey', JSON.stringify(value));
        this.setState({myKey: value});
    
        console.log("deneme",value);
    } 
    
    constructor(){
        AsyncStorage.getItem("myKey").then((value) => {
             if (value){
             let valueParsed = JSON.parse(value)        
             this.setState({myKey: valueParsed});
             console.log("didmounth : ", valueParsed)
             }    
    })
    }
    

    【讨论】:

    • AsyncStorage 只保存字符串,因此尝试保存对象会导致错误。
    • @Andrew 你可以使用“JSON.stringfy(objName)”来保存对象而不会出错
    • 你能看看这个例子来存储json吗medium.com/@luisbajana/…
    • @Nino9612 是的,我知道 :) 但原来的答案没有使用 JSON.parseJSON.stringify,所以它不起作用并会导致错误:(
    • @Andrew 感谢提醒我使用解析。现在可以了:)
    【解决方案2】:

    AsyncStorage.setItemthis.setStateasync funtion,所以你的 console.log() 不会像你希望的那样工作。为了安慰你可以试试

    savedata = async (value) => {
      try {
        await AsyncStorage.setItem("myKey", value);
        this.setState({myKey: value}, () => {
          console.log("deneme",value);
        })
      } catch (error) {
        console.log('Store error');
      }
    }
    

    【讨论】:

    • console.log("deneme",value);这段代码也适用于我的代码。但正如我在渲染中所说,当我使用 console.log("mykey : ", this.state.mykey ) 它给了我空对象
    • 在您的 render() 方法上添加代码行:console.log('render') 以识别您的组件是否呈现
    • 是的,它呈现
    • 这意味着this.setState() 方法有效。让我们尝试返回 saveData() 方法savedata = async (value) =&gt; { try { await AsyncStorage.setItem("myKey", value); return this.setState({myKey: value}, () =&gt; { console.log("deneme",value); }) } catch (error) { console.log('Store error'); } }
    • 它帮助了我@vuluu thx 兄弟。但我想问一下 asyc 和 await 在这里做什么 savedata = asyc (value) => await
    猜你喜欢
    • 2021-11-07
    • 2021-12-07
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多