2017-11-25 10 views
4

AsyncStorage를 사용하여 setItem을 처리 할 수 ​​없습니다. 다음은 내 코드입니다. 그래서 저는 TextInput에서 주에서 이름을 얻었고 AsyncStorage 에 저장하고 싶습니다. 내가 잘못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

당신은 @ 크리스 당신에 의해 발견으로 당신은 또한 asyncSetName 기능

주석이 라인 또한

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

의 결합을 유지해야합니다 react-native

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

에서 AsyncStorage를 가져올 필요 수업 이름을 AsyncStorage

012와 다른 것으로 변경해야합니다.
+0

감사합니다. 이'this.asyncSetName = this.asyncSetName.bind (this)'와 같은 생성자 (props)에서 함수를 바인드해야하며'onPress = {this.asyncSetName.bind (this)}'와 같이 호출해야합니다. 두 번 바인딩해야하는 이유는 무엇입니까? – Somename

+1

당신은 환영합니다 ... 바인딩에 관해서는 바인딩을 한 번해야합니다, 나는 하나의 생성자를 사용하는 것을 선호합니다 –

3
  1. @Amir가 말했듯이 AsyncStoragereact-native에서 가져올 필요가 있으며 바인딩을 그대로 유지해야합니다.
  2. 이 클래스에서 AsyncStorage이 아닌 다른 클래스로 이름을 바꾸는 것이 좋습니다.
  3. 원하는 경우 AsyncStorage 키의 네임 스페이스를 지정할 수 있습니다. 키 앞에 @AppName을 넣는 것이 일반적이므로 최종 키는 @AppName${this.state.name}이됩니다. 그러나 이것은 선택 사항이며 단지 관습입니다.