【发布时间】:2018-04-05 12:43:59
【问题描述】:
我正在使用 ReactJS + Relay + GraphQL + MongoDb 构建我的第一个 SaaS B2C 应用程序。例如,应用程序将具有以下对象:
- 用户
- 客户
- 库存项目
- 库存水平
- 价目表
- 销售
- 退货
对于每个对象,我可以查看其列表(例如:库存物品列表 - StockItem 列表),以及对象的详细信息。可以创建、编辑或删除对象 (CRUD)。
使用 REST,我将为每个对象构建一个数据获取器。因此,一旦用户去列出销售,即客户端将去服务器并获取所有可用的销售。如果用户单击详细信息,则会进行新的 REST 调用以获取此特定的销售详细信息,依此类推。
使用 GraphQL 我知道我应该创建一个大的viewer 查询,将所有这些对象和字段连接到应用程序,并使用片段来访问每个对象的它们。
这样做,我无法理解如果另一个用户更改某个对象会发生什么,因为所有数据将在应用程序开始时立即加载。一旦打开一个新屏幕,Relay 会重新加载片段,其工作方式与使用 REST 完成的方式相同吗?我应该建立一个更新机制吗?如果是这样,有什么方法可以走。
记住我有 40 多个不同的对象
或者我可能需要像使用 REST 一样为每个对象构建一个查询?
【问题讨论】:
-
我之前没有使用过 GraphQL 或 Relay,所以我不了解它们,但我认为您需要找出某种 Pub/Sub 逻辑来通知用户数据已更改。 MongoDb Oplog 记录对数据库进行的每个操作。您可以监听这些操作,如果相关数据被其他用户更改,您可以在其他用户浏览器上刷新数据。我相信 Meteor 使用了类似的方法。
-
有没有一种简单的方法可以做到这一点,否则我目前拥有的 40 多个对象会很疯狂。
-
恐怕我什么都不知道