首页 > 解决方案 > Apollo 客户端不更新缓存

问题描述

我正在尝试使用 Apollo 突变组件,但不知何故,我的缓存(或 ui?)没有像我预期的那样更新。代码执行得很好,但是从服务器接收到的新用户数据(例如 uuid/id 等)从未填充过当前数据。

我知道的'updateCache'不应该是突变所必需的,因为查询和突变的返回字段都是相等的(?)

这就是我的代码的样子;

架构

/**
 *
 * Reading user data from the cache
 */
export const GET_USER = gql`
   query getUser {
      user @client {
         uuid
         email
         firstName
         lastName
         __typename
      }
   }
`;

/**
 *
 * Sending user data to the GraphQL server
 */
export const SEND_USER = gql`
   mutation sendUser($input: UserInput!) {
      sendUser(input: $input) {
         uuid
         email
         firstName
         lastName
         __typename
      }
   }
`;

零件

return (
      <Mutation mutation={SEND_USER}>
         {(sendUser, { loading, data, error }) => (
            <Form handleOnSubmit={e => handleOnSubmit(e, sendUser)}>
               <UserFieldset user={userState} handleOnChange={handleOnChange} />
               <Button type="submit" loading={loading} disabled={loading}>
                  Create user
               </Button>

               <Query query={GET_USER}>
                  {({ data }) => (
                     <pre>
                        <h4>GET_USER</h4>
                        {JSON.stringify(data, null, 3)}
                     </pre>
                  )}
               </Query>

               <pre>
                  <h4>SEND_USER</h4>
                  {JSON.stringify(data, null, 2)}
               </pre>

            </Form>
         )}
      </Mutation>
   );
};

上面的两个查询都可以正常工作,我可以使用 GET_USER 接收我为用户设置的默认值,我可以通过 SEND_USER 进行突变,突变完成,返回的一些数据由我的测试转储显示。如果缓存中的最后一项是当前项,则似乎缓存已经以某种方式进行了更新,但又被默认值覆盖了。看我的截图;

初始状态截图

在此处输入图像描述

突变后状态截图 在此处输入图像描述

标签: reactjsapolloreact-apolloapollo-client

解决方案


推荐阅读