首页 文章

如何在react-apollo中刷新变量

提问于
浏览
0

这是场景:

USER 1

  • 1)进入登录页面

  • 2)写入通过突变发送到服务器的电子邮件和密码

  • 3)身份验证确定 - >服务器返回令牌和用户信息(id,firstName,lastName)

  • 4)令牌和每个用户信息存储在本地存储中的单独密钥中

  • 5)用户被重定向到主页

  • 6)用户转到 Profiles 页面

  • 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)用户决定退出

所以一切都适用于第一个用户,现在第二个用户到达同一台计算机和同一个浏览器 .

USER 2

  • 与上一个用户的步骤相同,从1到7

  • 发送到服务器以检索用户信息的查询无效,因为查询发送的id是前一个用户的id(并且不允许用户检索有关其他用户的信息)

如果我进行浏览器刷新,则使用良好的用户ID发送查询...

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

谢谢您的帮助 .

2 回答

  • 0

    这是因为您的 options 字段是静态的,并且在首次加载包含查询的文件时进行评估 . (我假设某处,也许是步骤3或4,本地存储中的 id 正确地为第二个用户更新 . )

    config.options可以是您现在传递的对象,也可以是查询需要时评估的函数 .

    所以要每次从 localStorage 加载 id 而不是一次,你可以这样做:

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

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

相关问题