【问题标题】:read data from cache graphql apollo 2.0从缓存graphql apollo 2.0读取数据
【发布时间】:2018-10-16 06:14:40
【问题描述】:

我正在使用阿波罗 2.0。我首先对给定的用户名和密码进行authUsergraphql 调用服务器,生成jwt 令牌并返回令牌作为响应。我确实看到成功登录后,User 存储在cache 中作为id 键值。 我确实有Buy 按钮,我需要为给定的token 制作validateSSOSession。对于validateSSOSession,我需要从缓存中读取token

我经历了client.readQueryclient.fragementQuery,但两者都不适用于我的案例 bcz client.readQuery 期望之前已向服务器调用相同的查询,我应该有相同的变量。因为我没有username/password,所以我不能打电话给client.readQuery。同样,client.fragementQuery 期望 id 是强制性的。由于我没有id,因此无法使用它。

暂时,我只是从cache 迭代data 并过滤User,如下所示。

const data = client.cache.data.data;
  const users = _.values(data).filter(obj=>(obj.__typename==='User' && obj.token));
  const token = users[0].token;

  // Make graphql call to validate sso
  const { data } = await client.query({
    query: GET_SSO_USER,
    variables: { token }
  });

  const authenticated = data.getSingleSignOnUser.user.userId;

是否有其他简单的方法可以从缓存中查询User 以获得给定条件?

【问题讨论】:

    标签: graphql apollo react-apollo apollo-client


    【解决方案1】:

    我使用client.readQuery()。请参阅有关 https://www.apollographql.com/docs/react/api/apollo-client.html#ApolloClient.readQuery

    的文档
    import gql from 'graphql-tag';
    import { withApollo } from "react-apollo";
    
    const MY_QUERY = gql`
        query {
          user {email}
        }`;
    
    const MyReactComp = ({client}) =>{
        const someQueryResult = client.readQuery({ query: MY_QUERY });
            return someQueryResult.user ? 'hello user' : 'oops';
        }
    
    export default withApollo(MyReactComp);
    

    【讨论】:

    猜你喜欢
    • 2020-11-17
    • 2018-07-14
    • 2021-08-24
    • 2020-10-22
    • 2021-06-05
    • 2020-07-07
    • 2019-04-02
    • 2020-02-12
    • 2021-02-09
    相关资源
    最近更新 更多