2017-03-05 1 views
5

React 네이티브 앱이 Relay와 통합되어있어 사용자에게 오프라인 우선 환경을 제공하고자합니다.신선한 데이터를 가져 오는 동안 반응 네이티브 앱에서 릴레이 캐시 데이터를 사용하십시오.

첫 번째 앱 실행에서 데이터가로드되는 동안 자리 표시자가 표시되어야합니다. 그 후 앱이 실행될 때마다 최신 데이터가로드되는 동안 마지막으로 캐시 된 데이터를 표시하려고합니다.

나는 this issue from 2015을 발견하고 eyston's answer에 따라 나는 AsyncStorage를 사용 relay-cache-managerCacheManager 기반으로 구현하기 위해 노력했습니다. CacheManager를 사용하면 캐시에서 릴레이 레코드를 저장하고로드 할 수 있지만 네트워크가 비활성화되면 앱에서 캐시 된 데이터를 표시 할 수 없습니다.

릴레이가 새로운 데이터를 가져 오는 동안 릴레이 캐시 된 데이터를 사용할 수있는 방법이 있습니까?

답변

5

오프라인 환경에서는 Relay 및 RealmDB을 사용하는 제작 앱이 있습니다. CacheManager는 그 당시에는 아직 준비가되지 않았기 때문에 CacheManager와 별도의 접근 방식을 취했습니다. 이에 대해 relay-local-schema을 사용했습니다.

우리는 relay-local-schema를 사용하여 모바일에 필요한 전체 스키마를 정의했습니다. 이것은 백엔드 서버가 graphql 스키마를 정의하고 realm db에서 데이터를 분석하기 위해 resolve 함수를 변경하는 것과 동일한 파일 일 수 있습니다. 이를 위해 우리는 realmdb에 백엔드 서버에 의해 반환 된 데이터를 쓰기 쉽게하기 위해 graphql 스키마와 거의 동일한 구조를 가진 realmdb에 스키마를 만들었습니다. 또한 graphql 내부 검사를 사용하여이 스키마 생성을 자동화 할 수 있습니다. 우리는 custom network layer을 정의했습니다. 여기서 모든 릴레이 쿼리가 항상 로컬 db에 닿도록했습니다. sendQueries 함수에서 모든 쿼리는 매우 신속하게 해결되는 relay-local-schema로 해결되고보기는 이전 데이터를 보여 주며 동시에 네트워크 요청은 sendQueries 함수의 각 요청에 대해 이루어집니다. 네트워크 요청에서 데이터를 수신하면 realmdb에 기록되고 Relay in-memory에는 새 데이터가 채워집니다. 그러면 데이터가 변경된 모든 반응보기가 자동으로 새로 고쳐집니다. 메모리 저장 릴레이에 데이터를 쓰기 위해 우리는 당신이 request.getQuery()를 사용 sendQueries 기능에받을 요청에서 쿼리 개체를 얻을 수있는 다음과 같은 문서화되지 않은 방법을

Relay.Store.getStoreData().handleQueryPayload(query, response); 

을 사용했다.

우리의 현재 구현은 우리의 비즈니스 로직과 묶여 있으므로이 로직을 오픈 소스로 만들기가 어렵습니다. 나는 데모 애플리케이션을 제공하려고 노력할 것이다.

+0

@meteors 빠른 답장을 보내 주셔서 감사합니다. relay-local-schema를 사용하려고 생각했지만, 내 앱에서 'GraphQLSchema'를 가져 오는 아이디어가 마음에 들지 않았기 때문에 포기했습니다. (스키마는 분리 된 프로젝트에 정의되어 있고 싶지 않습니다. 그것을 묶어 라). 귀하의 응답 후 [json-to-graphql-schema] (https://github.com/aweary/json-to-graphql) 저장소를 발견했습니다. babel-relay-plugin에서 사용하는 json 스키마를 사용하려고합니다. –

+0

구현을 확인하는 것이 좋습니다. 비즈니스 로직을 코드에서 분리하고 데모가 포함 된 리포지토리를 만드는 것이 어려울 수 있으므로 사용자 정의 네트워크 레이어 및 RealmDB 업데이트의 샘플 코드로 요점을 만들 수 있다면 고맙겠습니다. 코드는 = D 작동 할 필요가 없습니다. 어쨌든 로컬 스키마를 사용하여 접근 방식을 시도해 보겠습니다. 나는 진전이있을 때 여기에서 업데이트 할 것이다. –

+0

좋아, 곧 요점 또는 데모 응용 프로그램을 추가하려고합니다. – meteors

관련 문제