Graphql:是否可以使用未在架构中声明的NEW字段更新查询?

时间:2019-02-05 07:02:10

标签: graphql

因此,我有一个会话查询,用于登录时加载。因为负载太多(是的,正在加载大量应用程序数据),所以我减少了很多“会话”。但是,我现在遇到的问题是,当我进行突变时,我无法更新会话,因为看来只有我声明的字段会被更新,而突变中的所有其他内容都将被忽略。

注意:我想从客户端突变中进行更新。

所以,我有这样的东西:

@graphql(SESSION_QUERY)
class Foo etc....

现在,此会话的模式中的数据有限,如下所示:

query Session {
  session {
    id
    user_id
    first_name
    last_name
    products {
      shoes {
        id
        sizes
      }
      pants {
        id
        sizes
      }
      shirts {
        id
        sizes
      }
    }
  }

数据量巨大,所以我真的减少了数据量。现在,我的突变会根据用户的“添加”内容创建一个“新”项目。

这是问题所在,可以说用户“创建了一件衬衫”,但是通过THAT突变,用户创建了“尺寸”,“价格”,“优惠券代码”等。因此,我想要我的“衬衫”数组在这种情况下,要更新ala ..

        update: (store: ApolloStore, results: *) => {
          const data = store.readQuery({ query: SESSION_QUERY });
          const products = data.session.products[productType] || [];
          data.session.products[productType] =
          products.concat(results.data['createProductShirt']);
          store.writeQuery({ query: SESSION_QUERY, data });
        }

console.logging在写入之前和之后实际上都显示了更新,但是会话从未真正更新过。似乎只对其进行了筛选以仅更新id和大小。我需要更新整个返回集。

基本上,当我的组件获得新道具时,突变更新就不存​​在了。

即使在架构中未定义特定值,也有办法更新此会话吗?

我宁愿不使用redux,而且我的用法似乎不像使用apollo-link-state(似乎有点多)那样规避。

1 个答案:

答案 0 :(得分:2)

您不需要像这样手动更新apollo存储-Apollo缓存应为您保存所有内容,只要它具有在数据之间建立任何关系所需的ID。

您的客户端中的Apollo缓存设置是什么样的? 您是否尝试过使用Apollo Dev-tools来查看缓存中发生了什么?

或者reftechQueries还不足以让您更新从会话查询返回的数据吗?