我们有一个生产应用程序,它采用继电器和RealmDB用于离线经验。我们从CacheManager采取了单独的方法,因为当时CacheManager还没有做好准备。我们使用relay-local-schema。
我们定义了使用继电器本地架构移动所需的整个架构。这可能与您的后端服务器用于定义graphql模式的文件相同,并更改解析函数以解析来自领域数据库的数据。为此,我们还在realmdb中创建了架构,该架构与graphql架构几乎相同,以便将后端服务器返回的数据写入realmdb。您还可以使用graphql introspection查询自动生成此模式。我们定义了一个custom network layer,我们确保所有的Relay查询总是接触本地数据库。在sendQueries
函数中,所有查询都通过relay-local-schema进行解析,解析速度非常快,反应视图显示旧数据,同时在sendQueries
函数中为每个请求提出网络请求。在从网络请求接收数据时,它将写入realmdb中,并且中继内存中存储的数据也将填充新数据,这会自动刷新其数据更改的所有反应视图。为了将数据写入到继电器内存存储我们使用以下方法无证
Relay.Store.getStoreData().handleQueryPayload(query, response);
您可以从您在sendQueries功能接收使用request.getQuery()
请求获得查询对象。
我们当前的实现是有点忙不过来与我们的业务逻辑,因此它是很难开源这个逻辑。我会尽量提供一个演示应用程序是可能的。
感谢您的快速回复@meteors。 我想过使用中继本地模式,但我放弃了,因为我不喜欢进口的想法'GraphQLSchema'我的应用程序(该模式是在单独的项目中定义的,我不希望把它绑起来)。在你的回应后,我发现[json-to-graphql-schema](https://github.com/aweary/json-to-graphql)存储库。我将尝试使用babel-relay-plugin使用的json模式。 –
很高兴看到您的实施。 我知道很难将您的业务逻辑与代码分开,并创建一个具有演示的存储库,因此,如果您可以使用自定义网络层和RealmDB更新的示例代码创建要点,我将不胜感激。代码不需要工作= D。 无论如何,我会尝试使用本地模式的方法。当我取得一些进展时,我会在这里更新。 –
好吧,我会尽快添加一个要点或演示应用程序。 – meteors