【问题标题】:Relay Modern: delete record in optimisticUpdaterRelay Modern:在optimisticUpdater中删除记录
【发布时间】:2019-09-23 21:36:12
【问题描述】:

在我的应用程序中,我有一个mutation,我想在其中使用optimisticUpdater 在服务器响应之前更新视图。为此,我需要将列表中的一些记录删除到中继存储中,如下所示:

optimisticUpdater: storeProxy => {
  storeProxy.delete(recordDataID)
}

问题是中继不会删除记录,但它会转换null 中的记录。 这可能很烦人,因为我每次在我的应用程序中使用它时都必须过滤列表。

有人知道我如何删除记录吗? 谢谢

【问题讨论】:

    标签: reactjs graphql relayjs relay relaymodern


    【解决方案1】:

    如果您使用@connection 装饰您的查询,那么您可以使用ConnectionHandler 轻松删除记录:

    const query = graphql`query WidgetListQuery {
        widgets(first: 10) @connection(key: "WidgetList_widgets") {
            ...
        }
    }`
    
    optimisticUpdater(store) {
        const widgets = ConnectionHandler.getConnection(store.getRoot(), 'WidgetList_widgets');
        ConnectionHandler.deleteNode(widgets, deleted_widget.id)
    }
    

    【讨论】:

      【解决方案2】:

      您必须从列表中删除您的记录

      optimisticUpdater: (store) => {
          const listOfRecords = store.getRoot().getLinkedRecords('list')
          const newList = listOfRecords.filter(record => record.getDataID() !== recordDataID)
          store.getRoot().setLinkedRecords(newList, 'list')
      }
      

      在此示例中,我假设您的列表位于图表的根部

      【讨论】:

      • 您能解释一下为什么会这样吗?那么store.delete(id)的目的是什么?
      • store.delete(id) 是从商店中删除商品的有效方法,您只需在列表视图中说明它。您可以.filter() 输出为空的记录,或者显示一些文本,例如“此记录已被删除”if record === null
      猜你喜欢
      • 2020-06-14
      • 2017-10-15
      • 2018-05-17
      • 2017-11-23
      • 2017-11-27
      • 2018-02-14
      • 2018-04-11
      • 2018-08-30
      • 2018-05-15
      相关资源
      最近更新 更多