2017-11-25 10 views
4

AsyncStorageでsetItemにアクセスできません。以下は私のコードです。だから私はTextInputから州の名前を得て、それをAsyncStorageonPressTouchableOpacityに保存したいと思います。私はエラーを取得しています:AsyncStorageにsetItemを設定できません

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> 
    } 
} 

私が間違って何をしているのですか?助けてください。あなたはまた、コメントを解除asyncSetName機能

の結合このライン

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

を維持する必要があります

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

react-nativeから AsyncStorageをインポートする必要が

答えて

4

また@クリスあなたによって発見として異なるクラス名に変更する必要がありますAsyncStorage

+0

ありがとうございます。この 'this.asyncSetName = this.asyncSetName.bind(this)'のようにコンストラクタ(小道具)で関数をバインドしなければならないのですか? 'onPress = {this.asyncSetName.bind(this)}'のように呼び出す必要があります。 なぜ2回バインドする必要がありますか? – Somename

+1

あなたは大歓迎です...バインディングに関しては、一度バインドする必要があります。コンストラクタでバインディングを使用することをお勧めします –

3
  1. @Amirによれば、AsyncStoragereact-nativeからインポートし、拘束力を維持する必要があります。
  2. このクラスでは、クラス名をAsyncStorageに変更することをお勧めします。
  3. オプションで、AsyncStorageキーの名前空間を設定することもできます。 @AppNameをキーの前に置くのが一般的です。最後のキーは@AppName${this.state.name}になります。しかし、これもオプションであり、単に慣例である。
関連する問題