从缓存graphql apollo 2.0读取数据

joy*_*joy 7 apollo graphql react-apollo apollo-client

我正在使用apollo 2.0。我首先authUser graphql调用服务器以提供给定的用户名和密码,这会生成jwt令牌并作为响应返回令牌。我确实看到成功登录后将User其存储cacheid键值。我有Buy按钮,我需要做validateSSOSession的给予token。对于validateSSOSession,我需要token从缓存中读取。

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

暂时,我只是data从下面cache进行迭代和过滤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;
Run Code Online (Sandbox Code Playgroud)

是否有其他简便方法可以User从高速缓存中查询给定条件?

小智 6

我用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);
Run Code Online (Sandbox Code Playgroud)