2017-12-23 23 views
1

저는 반응 원시를 사용하여 asyncstorage에서 데이터를 검색하려고했습니다. 여기react-native array.map with asyncstorage.getItem

내가 지금까지 한 일이다

import React, { Component } from 'react'; 

import { 
    Text, 
} from 'react-native'; 

class GetData extends Component { 
    constructor() { 
    super() 
    this.state = { 
     dataLocalIds: [ 
     "data1Data", 
     "data2Data", 
     "data3Data", 
     "data4Data", 
     "data5Data", 
     "data6Data" 
     ], 
    } 

    this.state.dataLocalIds.map((value, index) => { 
     this.data = this.getDatas(value, index); 
    }) 
    } 

    async getDatas(value, index) { 
    try { 
     const value = await AsyncStorage.getItem(value).then(val => { 
     return JSON.parse(val) 
     }); 
     return value 
    } catch (err) { 
     throw err 
    } 
    } 

    renderScreen =() => { 
     return (
     <Text> Hello World </Text> 
    ); 
    } 

    render() { 
    return (
     this.renderScreen() 
    ); 
    } 
} 

export default GetData; 

문제는 다음 오류와 애플리케이션 충돌, "인덱스 1에 바인드 값이 null".

Stacktrace가 내 코드 내의 줄을 가리 키지 않습니다. 대신 sqlite 및 asyncstorage를 가리 킵니다.

이 문제를 해결하는 방법을 모르겠습니다. 도와 주시면 감사하겠습니다.

답변

0

아마도 getData() 메소드의 인수 이름이 value이기 때문에 원인이 value이고 try 블록 내부에 새로운 변수 const 값을 선언하고 있습니다.

AsyncStorage에 값을 전달할 때 변수가 선언 된 (JS 구문 분석 및 토큰 화 단계) 값이 undefined 인 경우 즉시 범위 (try 블록)에 대한 참조를 검색합니다. undefined은 AsyncStorage.getItem 메소드로 전달됩니다.

그 중 하나의 이름을 변경하십시오.

0

1) this.myFunction = this.myFunction.bind(this)을 생성자로 생각하면 해결할 수 있습니다.

다른 문제가 있습니다.

Getdatas 기능은 비동기이고 반환 2)

const promises = this.state.dataLocalIds.map((value, index) => this.getDatas(value, index)); 
const [data1, data2, ] = await Promise.all(promises) 

3) value라는 이름의 변수가 이미 geDatas 범위에 선언을 약속

시도가 수정하고

0

하는 것을 시도 알려 주시기하기 like :

constructor(){ 
    super(); 

    this.state={...} 
    this.getDataFromAsyncStorage() 
} 
async getDataFromAsyncStorage() { 
    let dataArray = []; 
    for (let value of this.state.localIds){ 
     let data = await AsyncStorage.getItem(value); 
     dataArray.push(data) 
    } 
    this.data = dataArray; 
} 
+0

또한 AsyncStorage가 데이터를 찾았는지 아닌지를 확인하는 작업을 추가했지만이 논리는 현재 코드에서 직면하게되는 문제가 없을 것이라고 생각하므로 일부 선명하게 작업해야합니다. –