Graphql 如何刷新apollo中的变量

Graphql 如何刷新apollo中的变量,graphql,apollo,react-apollo,apollo-client,Graphql,Apollo,React Apollo,Apollo Client,以下是场景: 用户1 1) 转到登录页面 2) 写入电子邮件和密码,并通过电子邮件发送到服务器 3) 身份验证确定->服务器返回令牌和用户信息(id、名字、姓氏) 4) 令牌和每个用户信息存储在本地存储器中的单独密钥中 5) 用户将被重定向到主页 6) 用户进入配置文件页面 7) 将向服务器发送一个查询,以检索有关该用户的所有信息(由于本地存储中存储了用户id) 以下是查询: const PROFILE_QUERY = gql` query profileQuery($id: ID!)

以下是场景:

用户1

  • 1) 转到登录页面
  • 2) 写入电子邮件和密码,并通过电子邮件发送到服务器
  • 3) 身份验证确定->服务器返回令牌和用户信息(id、名字、姓氏)
  • 4) 令牌和每个用户信息存储在本地存储器中的单独密钥中
  • 5) 用户将被重定向到主页
  • 6) 用户进入配置文件页面
  • 7) 将向服务器发送一个查询,以检索有关该用户的所有信息(由于本地存储中存储了用户id)
以下是查询:

const PROFILE_QUERY = gql`
  query profileQuery($id: ID!) {
    getUser(id: $id) {
      firstName
      lastName
      email
    }
  }
`;

export default graphql(PROFILE_QUERY, {
  options: {
    variables: {
      id: localStorage.getItem("id")
    },
    errorPolicy: "all"
  }
})(ProfilePage);
  • 8) 服务器返回信息,用户可以在配置文件页面中看到这些信息
  • 9) 用户决定注销
所以一切都在为第一个用户工作,现在第二个用户到达同一台计算机和同一个浏览器

用户2

  • 从1到7的步骤与前一个用户相同
  • 发送到服务器以检索用户信息的查询不起作用,因为查询发送的id是前一个用户的id(并且不允许用户检索有关其他用户的信息)
如果我进行浏览器刷新,查询将使用良好的用户id发送

那么,为什么在第一次尝试时不刷新id变量(似乎本地存储中的id值未被读取)?我如何解决这个问题


感谢您的帮助。

然后第一个用户注销,您需要重置Apollo store并清除本地存储。

然后第一个用户注销,您需要重置Apollo store并清除本地存储。

发生这种情况的原因是,您的
选项
字段是静态的,并且在首次加载包含查询的文件时进行计算。(我假设在某个地方,可能是步骤3或步骤4,本地存储中的
id
已为第二个用户正确更新。)

可以是像您现在传递的对象一样的对象,也可以是在查询需要时计算的函数

因此,要每次从
localStorage
加载
id
,而不是只加载一次,您可以执行以下操作:

options: () => ({
  variables: {
    id: localStorage.getItem("id")
  },
  errorPolicy: "all"
})

这是因为
options
字段是静态的,并且在第一次加载包含查询的文件时进行计算。(我假设在某个地方,可能是步骤3或步骤4,本地存储中的
id
已为第二个用户正确更新。)

可以是像您现在传递的对象一样的对象,也可以是在查询需要时计算的函数

因此,要每次从
localStorage
加载
id
,而不是只加载一次,您可以执行以下操作:

options: () => ({
  variables: {
    id: localStorage.getItem("id")
  },
  errorPolicy: "all"
})

谢谢你的回答没有,我没有提到,但是我已经用“this.props.client.resetStore”重置了Apollo商店,并且我从本地存储中删除了项目谢谢你的回答没有,我没有提到,但是我已经用“this.props.client.resetStore”重置了Apollo商店我从本地存储中删除了这些项目你的答案很完美我不知道!非常感谢Talz,我的查询现在运行得很好!你的答案很完美我不知道!非常感谢Talz,我的查询现在运行得很好!