簡體   English   中英

無法從 graphql 本地查詢中獲取我的反應變量

[英]Can't get my reactive variable from graphql local query

我正在嘗試通過反應設置 Apollo 3 本地狀態。 由於未知原因,當我嘗試讀取自定義類型時,我的查詢不起作用(isAuthenticated 查詢運行良好)。 你能幫我理解一下,我確實瀏覽了互聯網上有關本地狀態管理的所有文檔和鏈接。

謝謝

緩存.js

import { InMemoryCache, makeVar, gql } from '@apollo/client'

export const isAuthenticatedVar = makeVar(!!localStorage.getItem('token'))
export const userVar = makeVar("")

export const cache = new InMemoryCache({
  typePolicies: {
    Query: {
      fields: {
        isAuthenticated: {
          read() {
            return isAuthenticatedVar()
          }
        },
        user: {
          read() {
            return userVar()
          },
          __typename: 'User',
        }
      }
    }
  }
})

export const IS_AUTHENTICATED = gql`
  query IS_AUTHENTICATED {
    isAuthenticated @client
  }
`

export const GET_LOCAL_USER = gql`
  query GET_LOCAL_USER {
    user @client
  }
`

typedej.js

import { gql } from '@apollo/client'

export const typeDef = gql`

  extend type User {
    id: ID!
    name: String!
    surname: String!
    email: String!
    password: String!
    phone: String!
    adress: Adress!
    isAdmin: Boolean!
    isCoach: Boolean!
    isManager: Boolean!
  }

  extend type Query {
    isAuthenticated: Boolean!
    user: User!
  }
`

export default typeDef

測試.js

const login = (email, password) => {
    const emailLower = email.toLowerCase()
    client.query({
      query: LOGIN,
      variables: { email: emailLower, password: password }
    })
    .then(result => {
      console.log(result)
      localStorage.setItem('token', result.data.login.token)
      localStorage.setItem('userId', result.data.login.user.id)
      
      isAuthenticatedVar(true)
      userVar({ ...result.data.login.user})
      console.log('USER VAR SETUP')
      ///Console.log show that userVar contains an object with all User data
      console.log(userVar())
      var test 
      try{
        //test return NULL object
        test = client.readQuery({ query: GET_LOCAL_USER}).user
      }catch(error) {
        console.log(error)
      }
      console.log('FETCH QUERY userVar')
      console.log(test)

      navigate("/")
    })
    .catch(error => {
      console.log(error)
    })
  }

嘗試了幾種方法,但找不到解決方法。 我不明白為什么文檔沒有解釋如何使用對象類型

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM