네이티브 및 그 개념에 상당히 새로워졌습니다. 나는AsyncStorage를 사용하여 API 데이터를 캐시하는 방법 React 네이티브
http://jsonplaceholder.typicode.com/photos 내가 AsyncStorage의 문서로 찾고있다
하는 구현하는에서 API 데이터를 가져올 수있는 응용 프로그램을 만드는 동안 RN와 함께 연주 한 API 데이터를 캐시하여 애플리케이션을 종료 할 때 웹에서 데이터를 반복해서 가져올 필요가 없지만 성공적으로 구현할 수는 없었습니다.
나에게 도움/제안을 제공해 주시면 대단합니다. 내 응용 프로그램에있는 중요한 파일 2 개에 대한 소스 코드를 포함하여 Test.js 파일을 얻는 방법을 설명했습니다.
import React, {Component} from 'react';
import { FlatList, View, Text, AsyncStorage, ActivityIndicator } from 'react-native';
import axios from 'axios';
import GalleryDetail from './GalleryDetail';
class GalleryList extends Component {
state = { photos: []};
componentDidMount() {
axios.get('http://jsonplaceholder.typicode.com/photos')
.then(response => this.setState({ photos: response.data }))
.catch((error)=> console.warn("fetch Error: ", error));
}
getPhotos = async()=> {
try {
photos = await AsyncStorage.getItem('GalleryPhotos');
}
catch (error) {
console.error(error);
}
}
savePhotos(){
AsyncStorage.setItem('GalleryPhotos', this.state.photos);
console.log('works !');
}
renderPhoto = ({item})=> {
return <GalleryDetail photo={item}/>
}
keyExtractor = (photo, index) => photo.id;
render() {
if(!this.state.photos){
return <ActivityIndicator/>;
}
return (
<FlatList
data = {this.state.photos}
keyExtractor={this.keyExtractor}
renderItem={this.renderPhoto}
/>
);
}
}
export default GalleryList;
및 GalleryDetail는 GalleryList-와 연결
import React, {Component} from 'react';
import { Text, View, Image } from 'react-native';
import Card from './Card';
import CardSection from './CardSection';
const GalleryDetail = (props)=> {
return (
<Card>
<CardSection style = {styles.headerContentStyle}>
<Image
style={styles.thumbnailStyle}
source = {{ uri: props.photo.thumbnailUrl}}/>
<Text style= {styles.textStyle}>{props.photo.title} </Text>
</CardSection>
</Card>
);
};
const styles = {
headerContentStyle: {
flexDirection: 'column',
justifyContent: 'space-around'
},
thumbnailStyle: {
height: 60,
width: 60
},
textStyle: {
fontSize: 12,
//textAlign: 'right',
flexDirection: 'row',
justifyContent: 'flex-end',
flex: 1,
flexWrap: 'wrap',
marginLeft: 5,
marginRight: 5,
}
}
export default GalleryDetail;
시도 내 방법은 그것이 비동기에서 페치 데이터 - 발견하면, 먼저, asyncStorage에서 찾게됩니다 응용 프로그램을 실행하면 드리려고 했다 그렇지 않으면 웹으로 이동하여 나중에 사용하기 위해 다시 가져 와서 저장하십시오. 나는 이미 별개의 파일에 이것을 구현하려고 애썼다. 이상한 깨진 구문은
State = {
photos: []
}
componentDidMount() {
// just a variable acting to fetch data from the stored keyvalue pair
check = AsyncStorage.getItem("PhotosKey").then((response) => {
this.setState({"PhotosKey": response});
}).done();
if(check) {
console.log('Data was fetched!!!!!');
check();
}
else {
console.log("Data was not fetched!");
var Data = axios.get('http://jsonplaceholder.typicode.com/photos').
then(response => this.setState({ photos: response.data })).
catch((error)=> console.warn("fetch Error: ", error));
}
}
미리 감사드립니다.
@Subramanya에게 감사드립니다. 그것은 내 코드가 어떻게 생겼는지에 대한 정말 좋은 인식을주었습니다. 나는 단지 공유 할 염려가 거의 없다. React 네이티브 내부에 asyncstorage를 추가하려는 동기는 응용 프로그램을 시작할 때 GalleryPhotos에서 데이터를 가져와야합니다. 찾을 수 없다면 데이터를 가져 와서 다음에 사용할 수 있도록 저장합니다. 귀하가 작성한 코드는 매번 데이터를 가져 오는 것과 비슷합니다. 데이터가 매번 같기 때문에 매번 가져올 필요가 없습니다. 내가 뭔가를 놓친다면 나를 바로 잡으세요. :) –
@ 렉스 - 고마워요. Redux를 구현 한 후 애플리케이션을 업데이트 할 때이 코드를 자세히 살펴볼 것이다. 하지만 고맙습니다. 내 질문에 대답하는 데 시간이 많이 걸렸을 거라 믿는다. (너무 길다) –
나는 당신의 코멘트에 기초하여 대답을 업데이트했다. 조건이 충족되면 GalleryPhotos의 존재 여부와 함께 점검을 추가했다. –