我正在使用ReactJS + Relay + GraphQL + MongoDb构建我的第一个SaaS B2C应用程序。例如,应用程序将具有以下对象:
对于每个对象,我可以看到它的列表(例如:库存项目列表 - StockItem列表),以及对象的详细信息。可以创建,编辑或删除对象(CRUD)。
使用REST我会为每个对象构建一个数据获取器。因此,一旦用户进入列表销售,即客户端将转到服务器并获取所有可用的销售。如果用户单击以详细说明,则将执行新的REST调用以获取此特定的销售详细信息,依此类推。
使用GraphQL我明白我应该创建一个大的viewer
查询,将所有这些对象和字段连接到应用程序,并使用片段为每个对象访问它们。
这样做,我无法理解如果另一个用户更改某个对象会发生什么,因为所有数据将在应用程序开始时立即加载。一旦打开新屏幕,Relay会重新加载片段,工作方式与使用REST完成相同吗?我应该建立一个更新机制吗?如果是这样,有什么方法可以去。
请记住我有40多个不同的对象
或者我可能需要像使用REST一样为每个对象构建一个查询?
答案 0 :(得分:0)
是的,您需要为每个对象构建一个查询。
使用带有中继的<QueryRenderer />
来调用查询
每次要批量查询时,您都会有一个<QueryRenderer />
与查询相关联。
例如,让我们想象两个页面:/users
和/sales
,它们都是列表。
/users
可以渲染,某处:
<QueryRenderer
environment={...}
query={graphql`
query UsersPageQuery {
users(first: 10) {
edges { node {
...UsersPage_user
}}
}
}
`
// ... others props
/>
/sales
可以在某处呈现:
<QueryRenderer
environment={...}
query={graphql`
query SalesPageQuery {
sales(first: 10) {
edges { node {
...SalesPage_sale
}}
}
}
`
// ... others props
/>
不要一次加载所有数据
一个好主意是每个视图有一个<QueryRenderer />
,如列表或项目详细信息视图。与REST中相同的拆分;)