GraphQL 突变后的 updateQueries 不适用于 Apollo 客户端

2023-12-11

当我发送一个createMessage我的应用程序发生突变,我想更新本地ApolloStore using updateQueries.

我的设置如下:

const ChatWithAllMessages = graphql(allMessages, {name: 'allMessagesQuery'})(Chat)
export default graphql(createMessage, {
   props({ownProps, mutate}) {
    return {
      createMessageMutation(text, conversationId) {
        return mutate({
          variables: { text, conversationId },
          updateQueries: {
            allConversations: (previousState, {mutationResult}) => {
              console.log('Chat - did send mutation for allConversationsQuery: ', previousState, mutationResult)
              return ...
            }
          }
        })
      }
    }
  }
})(ChatWithAllMessages)

我正在打电话createMessageMutation在我的代码中像这样:

_onSend = () => {
  this.props.createMessageMutation(this.state.message, this.props.conversationId)
}

通过此设置,我期望我在值中指定的函数updateQueries然而,这似乎并没有发生(日志记录语句从未被打印)。

作为参考,这是allConversation查询在ApolloStore好像:

enter image description here

另外,我的 JS 代码中是这样定义的:

const findConversations = gql`
    query allConversations($customerId: ID!) {
        allConversations(filter: {
          customer: {
            id: $customerId
          }
        }){
            id
            updatedAt
            slackChannelName
            agent {
                id
                slackUserName
            }
            messages(last: 1) {
                id
                text
                createdAt
            }
        }
    }
`

有人发现我做错了什么吗?


如果您在同一组件中使用查询和突变,则可以组合突变和查询。就像解决方案 1 中那样。

如果您不需要组件中的突变,您可以添加命名查询(从版本 0.11.1 开始/因此必须至少调用相关查询一次,否则 apollo 存储不知道该查询)或者您可以添加查询本身更新查询。

1)使用变异和查询的组件

import { compose } from 'react-apollo';

...

import findConversationsQuery from './.../findConversationsQuery';

...

const ChatWithAllMessages = compose(
    graphql(allMessages, {name: 'allMessagesQuery'}),
    findConversationsQuery,
    graphql(createMessage, {
      props({ ownProps, mutate }) {
        return {
          createMessageMutation(text, conversationId) {
            return mutate({
              variables: {
                text,
                conversationId
              },
              updateQueries: {
                allConversations: (previousState, {
                  mutationResult
                }) => {
                  console.log('Chat - did send mutation for allConversationsQuery: ', previousState, mutationResult)
                  return ...
                }
              }
            })
          }
        }
      }
    })(Chat)

使用文件中定义的 graphql 查询,因为您只想实例化一次

import { graphql } from 'react-apollo';
import gql from 'graphql-tag';

const findConversations = gql`
    query allConversations($customerId: ID!) {
        allConversations(filter: {
          customer: {
            id: $customerId
          }
        }){
            id
            updatedAt
            slackChannelName
            agent {
                id
                slackUserName
            }
            messages(last: 1) {
                id
                text
                createdAt
            }
        }
    }
`

const findConversationsQuery = graphql(findConversations, {
   name: "findConversationsQuery"
});

export default findConversationsQuery
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GraphQL 突变后的 updateQueries 不适用于 Apollo 客户端 的相关文章

  • 如何检测浏览器是否支持自定义元素

    我正在查看 Modernizr 它应该有助于功能检测 这应该可以帮助确定您的网站是否与给定的 Web 浏览器兼容 但我没有看到任何表明我可以使用它来检测自定义 HTML 的内容我们在内容中创建和定义的元素 如果不是 Modernizr 我如
  • 将 OoXml 插入单词抛出错误:未知

    我一直在尝试通过office js将OOXML插入到word文档的正文内容中insertOoXML 方法 我什至尝试过最简单的实现 认为我在尝试替换 XML 本身中的 fieldCodes 时做了一些不正确的事情 所有结果都是这样Error
  • React js Stripe 结账不起作用

    我正在尝试在 React js 应用程序中呈现条带结账默认表单
  • 了解设置 JQuery 变量

    了解设置 JQuery 变量 最近 我通过在 StackOverflow 上遇到的另一个问题寻找帮助 了解到如何设置 JQuery 变量 如下所示 您可以通过简单地调用变量来创建输入字段 并且锚变量似乎也定义了样式 var clicked
  • 从数据 URI 解码 QR 码

    我尝试从数据 uri 中解码二维码 var dataUri data image gif base64 R0lGODdh9gD2AIAAAAAAAP ywAAAAA9gD2AAAC decodeQrCode dataUri cb 我已经尝试
  • 解析“流”JSON

    我在浏览器中有一个网格 我想通过 JSON 将数据行发送到网格 但浏览器应该在接收到 JSON 时不断解析它 并在解析时将行添加到网格中 换句话说 在接收到整个 JSON 对象后 不应将行全部添加到网格中 应该在接收到行时将其添加到网格中
  • 如何重置使用 JavaScript 更改的 CSS 属性?

    我的导航按钮的宽度从 100px 增加到 150px 当鼠标悬停在 nav li hover width 150px 但是使用 javascript 我已经做到了 无论选择哪个选项 宽度都将继续为 150px 当选择每个选项时 它会使其他选
  • 使用 useReducers 调度函数发送多个操作?

    使用时是否可以通过调度函数发送多个动作useReducer挂钩反应 我尝试向它传递一组操作 但这会引发未处理的运行时异常 明确地说 通常会有一个初始状态对象和一个减速器 如下所示 const initialState message1 nu
  • 使用 JavaScript 使链接保持活动状态并在单击时显示悬停效果

    I am struggling to make this work I d like to make it where if O F is clicked the hover state stays active if another li
  • Meteor:应用程序无法在 0.9.1.1 版本上运行

    出现类似错误 Error TypeError undefined is not a function evaluating Template create anonymous function iron dynamic template j
  • 可以使用 jQuery 或 Javascript 将图片的特定部分用作链接吗?

    我有这个想法 将图片 而不是文本 的各个部分链接到不同的页面或网站 并且我想在不实际创建不同的照片并将它们彼此靠近的情况下完成 这样看起来就像是一张完整的图片 这里有人知道如何使用 JavaScript 的变体 例如 jQuery 或纯 J
  • 如何将 Google Charts 与 Vue.js 库一起使用?

    我正在尝试使用 Vue js 库使用 Google Charts 制作图表 但我不知道如何添加到 div 这是我尝试做的 这是如何使用普通 javascript 添加图表 这是文档的代码示例 https developers google
  • Jquery/Javascript 上传和下载文件,无需后端

    是否可以在没有后端服务器的情况下在 JavaScript 函数中下载和上传文件 我需要导出和导入由 JavaScript 函数生成的 XML 我想创建按钮 保存 xml 来保存文件 但我不知道是否可行 另一方面 我希望将 XML 文件直接上
  • Meteor - 从客户端取消服务器方法

    我正在通过服务器方法执行数据库计数 用户可以选择他们希望如何执行计数 然后调用该方法 我的问题是 计数可能需要一些时间 并且用户可能会在方法运行时改变主意并请求不同的计数 有什么方法可以取消调用的方法并运行新的计数吗 我认为 this un
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • 通过 CDN 使用 Dojo 时如何加载自定义 AMD 模块?

    我正在使用 google 的 CDN 并尝试使用他们的加载程序加载我自己的 AMD 模块 我知道我做错了什么 但我被困住了 有任何想法吗
  • 如何使用tampermonkey模拟react应用程序中的点击?

    我正在尝试使用 Tampermonkey 脚本模拟对 React 元素的点击 不幸的是 由于 React 有自己的影子 DOM 所以天真的方法使用document querySelector 不工作 我遇到了一些需要修改 React 组件本
  • HTML 离线应用程序缓存,列出下载的文件

    作为我正在构建的离线 Web 应用程序的加载屏幕的一部分 使用缓存清单 http developer apple com library safari documentation iPhone Conceptual SafariJSData
  • 在 React.js 中编辑丰富的数据结构

    我正在尝试为数据结构创建一个简单的基于网格的编辑器 但我在使用 React js 时遇到了一些概念问题 他们的文档对此没有太大帮助 所以我希望这里有人可以提供帮助 首先 将状态从外部组件传输到内部组件的正确方法是什么 是否有可能将内部组件中
  • fullCalendar 未显示正确的结束日期

    我正在看调试页面 http jsbin com wukofacaxu edit js outputFullCalendar 官方网站的 我想安排一个活动时间为 22 09 2015 至 30 09 2015 dd mm yyyy 但它只显示

随机推荐

  • 计算在 Apple 地图中完成旅程所需的时间

    我正在 MKMapView 上工作以获取两个位置之间的方向 有什么方法可以获取完成此旅程所需的时间 是否有任何内置属性MKRoute or MKDirection可以为我提供时间来完成这段旅程的课程吗 任何帮助 将不胜感激 谢谢 维卡斯 Y
  • 将 2D 数组复制到已知可变宽度的 GPU

    我正在研究如何将每行可变宽度的 2D 数组复制到 GPU 中 int rows 1000 int cols int host matrix malloc sizeof int rows int d array int length Each
  • Apache:如何在 Alias 中使用重写引擎

    我有这个别名配置 Alias test D WWW Test
  • 从经过身份验证的站点获取文件(使用 python urllib、urllib2)

    我正在尝试从网站获取查询的 Excel 文件 当我输入直接链接时 它将进入登录页面 输入用户名和密码后 它将自动下载 Excel 文件 我试图避免安装不属于标准 python 的附加模块 该脚本将在 标准化机器 上运行 如果未安装该模块 它
  • C/C++ 中的“@”和“$”代表什么? [复制]

    这个问题在这里已经有答案了 到目前为止 在 MinGW 中 似乎只是一个基本字符 如 a 可以在名称 变量 函数等 中使用 但它看起来并不像一个 使用 作为我缺少的名称的一部分是否有一些隐藏功能 int m 2 printf m i m 控
  • 三指针数组的 C# 包装器

    我目前正在开发一个 C 包装器 以便与 Dallmeier Common API light 一起使用 请参阅之前的帖子 C 包装器和回调 我几乎已经 包装 了所有内容 但我坚持包装一个回调 其中包含一个由三个指针组成的数组和一个数组整数
  • 更新文件或文件夹修改日期

    当文件和文件夹从一个位置复制到另一个位置时 我需要更新文件和文件夹的 修改日期 属性 以便 修改日期 当前系统时间 我有一台装有 Windows 7 的电脑 但我没有管理权限 因此无法安装任何自定义实用程序 我当前的bat文件使用XCOPY
  • EF4 生成数据库

    我正在尽最大努力寻找最简单的方法来创建基本的 模型优先 实体框架示例 然而 我正在努力解决数据库的实际生成问题 特别是针对数据库运行 SQL Tools 视觉工作室2010 SQL Server 2008 Express Process 创
  • 如何在 dart 构建中启用 --enable-experimental-mirrors?

    我的项目构建失败了 因为它们依赖于镜像 而 dart build out put 告诉我使用 enable experimental mirrors尝试在 dart2js 代码中按原样使用镜像 所以如果我跑pub build enable
  • 通过线性布局移动图像

    我正在开发一个 Android 2 2 应用程序 我想将图像从屏幕左侧移动到屏幕右侧 我怎样才能做到这一点 我读到我必须将此图像添加到 ListView 或 GridView 才能设置此动画 UPDATE我创建了以下文件 动画 transl
  • 为什么使用 PosixFilePermission 设置目录权限不起作用

    下面是我的代码 String DirectoryPath Users xxx uploads image Path newDirectoryPath Paths get DirecotryPath if Files exists newDi
  • 如何将条件变量对象插入向量?

    conditional variable 不是可复制构造 可移动构造 可复制分配 可移动分配 我们可以这样打电话吗 vector
  • 确定具有 NA 的行数

    我有一个数据框如下 col1 col2 col3 1 23 17 NA 2 55 NA NA 3 24 12 13 4 34 23 12 我有兴趣查找带有 NA 的 col2 和 col3 中的行数 我很惊讶下面的代码只给了我 4 而不是
  • 空格、换行符、制表符;它们会影响服务器性能吗?

    空格 换行符 制表符 它们会影响服务器性能吗 我正在学习 PHP 的路上 在进一步采用当前的编码风格之前 我想确保 换行符和空格是否会影响服务器的性能 通常 我总是添加它们以提高可读性 例如在下面的代码中 import something
  • 如何在不重新加载页面的情况下更改 Firefox window.location.hash? [复制]

    这个问题在这里已经有答案了 我在 URL 片段中存储一些状态信息 哈希 无论你怎么称呼它 当我改变window location hash在 Chrome 和 Safari 中 页面不会重新加载 这是我想要的行为 当我改变时window l
  • 为什么编译器会警告未初始化的变量,即使我已经分配了该变量的每个字段?

    我完全分配了字段MyStruct实例名为x在比赛的每一个可能的括号中 enum MyEnum One Two Three struct MyStruct a u32 b u32 fn main f MyEnum One f MyEnum T
  • 使用 sed 在 bash for 循环中查找和替换

    我在文本文件中有大量单词需要替换 该脚本一直在运行 直到我得到 sed 命令 sed 1 js 无效的命令代码 PS Bash 不是我的强项之一 这不需要漂亮或高效 cd Users xxxxxx Sites xxxxxx echo pwd
  • 数据表自定义过滤

    我对自定义过滤在数据表中的工作方式感到非常惊讶 看来我需要定义一个global过滤功能如下 fn dataTableExt afnFiltering push function oSettings aData iDataIndex 进而AL
  • 在没有 VTK 的情况下,在 python 中对 3D 数据进行插值/子采样

    我想做的事情相当简单 但到目前为止我还没有找到直接的方法 我有一个带有浮点值的 3D 直线网格 因此 3 个坐标轴 1D numpy 数组 用于网格单元的中心 以及一个具有相应形状的 3D numpy 数组 每个单元中心都有一个值 我想插值
  • GraphQL 突变后的 updateQueries 不适用于 Apollo 客户端

    当我发送一个createMessage我的应用程序发生突变 我想更新本地ApolloStore using updateQueries 我的设置如下 const ChatWithAllMessages graphql allMessages