更新数据库更新的客户端数据

时间:2017-10-24 16:09:12

标签: reactjs graphql relayjs

我正在使用ReactJS + Relay + GraphQL + MongoDb构建我的第一个SaaS B2C应用程序。例如,应用程序将具有以下对象:

  • 用户
  • 客户
  • StockItem
  • StockLevel
  • 价目表
  • 销售
  • 返回

对于每个对象,我可以看到它的列表(例如:库存项目列表 - StockItem列表),以及对象的详细信息。可以创建,编辑或删除对象(CRUD)。

使用REST我会为每个对象构建一个数据获取器。因此,一旦用户进入列表销售,即客户端将转到服务器并获取所有可用的销售。如果用户单击以详细说明,则将执行新的REST调用以获取此特定的销售详细信息,依此类推。

使用GraphQL我明白我应该创建一个大的viewer查询,将所有这些对象和字段连接到应用程序,并使用片段为每个对象访问它们。

这样做,我无法理解如果另一个用户更改某个对象会发生什么,因为所有数据将在应用程序开始时立即加载。一旦打开新屏幕,Relay会重新加载片段,工作方式与使用REST完成相同吗?我应该建立一个更新机制吗?如果是这样,有什么方法可以去。

请记住我有40多个不同的对象

或者我可能需要像使用REST一样为每个对象构建一个查询?

1 个答案:

答案 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中相同的拆分;)