突变后无法重新查询

时间:2019-03-20 13:34:28

标签: 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 的位置。

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

我在做什么错了?

更新

父级组件中渲染功能的返回如下:

<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
            }
          }
        }
      }
    `;

1 个答案:

答案 0 :(得分:0)

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

如果您同时使用这两件事,更新将发送到Query:

  1. Query设置选项:fetchPolicy="cache-and-network"(您已经使用过)。
  2. 注释refetchQueries,并使用Query的{​​{1}}。将函数附加到refetch的{​​{1}},然后直接从Mutation调用onCompleted。您应该在HTTP请求中看到graphql查询,并且UI也应该更新自身。

注意。尽管我猜缓存已更新,但UI却无法使用fetchPolicy的“缓存优先”功能。