오프라인 환경에서는 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);
을 사용했다.
우리의 현재 구현은 우리의 비즈니스 로직과 묶여 있으므로이 로직을 오픈 소스로 만들기가 어렵습니다. 나는 데모 애플리케이션을 제공하려고 노력할 것이다.
@meteors 빠른 답장을 보내 주셔서 감사합니다. relay-local-schema를 사용하려고 생각했지만, 내 앱에서 'GraphQLSchema'를 가져 오는 아이디어가 마음에 들지 않았기 때문에 포기했습니다. (스키마는 분리 된 프로젝트에 정의되어 있고 싶지 않습니다. 그것을 묶어 라). 귀하의 응답 후 [json-to-graphql-schema] (https://github.com/aweary/json-to-graphql) 저장소를 발견했습니다. babel-relay-plugin에서 사용하는 json 스키마를 사용하려고합니다. –
구현을 확인하는 것이 좋습니다. 비즈니스 로직을 코드에서 분리하고 데모가 포함 된 리포지토리를 만드는 것이 어려울 수 있으므로 사용자 정의 네트워크 레이어 및 RealmDB 업데이트의 샘플 코드로 요점을 만들 수 있다면 고맙겠습니다. 코드는 = D 작동 할 필요가 없습니다. 어쨌든 로컬 스키마를 사용하여 접근 방식을 시도해 보겠습니다. 나는 진전이있을 때 여기에서 업데이트 할 것이다. –
좋아, 곧 요점 또는 데모 응용 프로그램을 추가하려고합니다. – meteors