reactjs - 突变后重新获取查询不起作用

标签 reactjs graphql react-apollo

我的突变如下:

<Mutation
    mutation={ADD_NEW_SLOT}
    refetchQueries={() => [{ query: GET_COMPANY_ADDRESSES, variables: { companyId: this.props.session.company.id } }]}
    awaitRefetchQueries={true}
>
     .......
</Mutation>

其中GET_COMPANY_ADDRESSES是从父组件导出的。

但是突变完成后不会刷新。

我做错了什么?

更新

parent组件中render函数的返回如下:

<Query query={GET_COMPANY_ADDRESSES} variables={{companyId: session.company.id}} notifyOnNetworkStatusChange={true} fetchPolicy={'cache-and-network'}>
    {({loading, error, refetch, data}) => {
        if (loading) return <LoadingIndicator/>;
        if (error) return <ErrorIndicator description={error.message}/>;

        const treeNodes = convertSlotsToTree(data);
        const address = data.companyAddresses[1];

        return (
            <AddSlot address={address}
                     toggleSlotForm={this.props.togglePanel}
                     session={this.props.session}/>
        )
    }}
</Query>

graphql 查询位于同一个文件中,如下所示:

export const GET_COMPANY_ADDRESSES = gql`
      query CompanyAddresses($companyId: Int!) {
        companyAddresses(companyId: $companyId) {
          id    
          name
          default
          compound
          address {
            id
            addressFull
            countryCode
            city
            postCode
            slotSet{
                id
                area
                zone
                aisle
                side
                level
                position
                disabled
                col
                printEntry
                fullName
            }
          }
        }
      }
    `;

最佳答案

它仍然无法与没有解决方法的react-apollo 3.1.x一起使用。

看来,如果你使用这两个东西,更新将被发送到查询:

  1. 查询设置选项:fetchPolicy="cache-and-network"(您已经使用过此选项)。
  2. 注释 refetchQueries 并使用 Queryrefetch 代替。将函数附加到 MutationonCompleted 上,并直接从 Query 调用 refetch。您应该在 HTTP 请求中看到 graphql 查询,并且 UI 也应该自行更新。

注意。 “缓存优先”作为 fetchPolicy 不起作用,虽然我猜缓存已更新,但 UI 没有。

关于reactjs - 突变后重新获取查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55261983/

相关文章:

javascript - 如何修复 'Objects are not valid as a React child'

javascript - 输入 onChange() 事件未被调用

graphql,当有 "add"和 "update"突变时如何设计输入类型?

javascript - 处理对象数组时如何构建 GraphQL 突变

node.js - 如何使用 apollo-server-express 从 graphql 解析器内更新 session

javascript - 如何在 Apollo Client React 中获取多个条件查询?

error-handling - reactjs尝试在渲染中捕获不捕获子级错误

javascript - 延迟 componentDidMount 获取 this.props 被读取

reactjs - Apollo 突变去抖和竞争条件

javascript - 创建客户端后(登录后)将上下文链接添加到 Apollo Link