2017-11-25 165 views
4

我無法使用AsyncStorage setItem。以下是我的代碼。所以我從TextInput那裏得到這個名字,然後想把它存儲在TouchableOpacityAsyncStorageonPress。我收到提示:無法在AsyncStorage中設置項目

enter image description here

import React, { Component } from 'react'; 
import { View, Text, StyleSheet, TextInput, TouchableOpacity} from 'react-native'; 

class AsyncStorage extends Component { 

    constructor(props) { 
     super(props); 
     this.state = { 
      name:'' 
     } 
     //this.asyncSetName = this.asyncSetName.bind(this) //tried this too. 
    }; 

    asyncSetName(){ 
     let name = this.state.name 
     AsyncStorage.setItem('name', name); 
    } 

    render(){ 
     <View> 
      <TextInput 
       placeholder='Set Name here' 
       onChangeText={(name) => this.setState({name})} 
       value={this.state.name} 
       autoCorrect={false} 
      ></TextInput> 

      <TouchableOpacity 
       onPress={this.asyncSetName.bind(this)} 
      > 
       <Text>SetName</Text> 
      </TouchableOpacity> 
     </View> 
    } 
} 

我在做什麼錯?請幫忙。

回答

4

你需要從react-native

import { View, Text, StyleSheet, TextInput, TouchableOpacity , AsyncStorage} from 'react-native'; 

導入AsyncStorage您還需要保持asyncSetName功能

取消註釋此行

this.asyncSetName = this.asyncSetName.bind(this) 

同樣的結合通過@克里斯你的發現需要更改您的班級名稱以便與AsyncStorage

012不同
+0

謝謝。我是否必須在構造函數(props)中綁定這個'this.asyncSetName = this.asyncSetName.bind(this)',並且像這樣調用它:'onPress = {this.asyncSetName.bind(this)}'。 爲什麼我需要將它綁定兩次? – Somename

+1

歡迎您......關於綁定,您需要綁定一次,我更喜歡使用構造函數中的一個 –

3
  1. 正如@Amir所說,您需要從react-native導入AsyncStorage以及保留綁定,因爲他建議。
  2. 您可能想要將您的班級重命名爲AsyncStorage以外的其他人
  3. 或者,您可能想要命名空間您的AsyncStorage密鑰。通常在密鑰的前面放置一個@AppName,所以最終的密鑰最終將會是@AppName${this.state.name}。但是,再次,這是可選的,只是慣例。
相關問題