मैं एक क्लाइंट को useMutation को स्पष्ट रूप से आपूर्ति करने का प्रयास कर रहा हूं। इस तथ्य को छोड़कर सब कुछ ठीक काम करता है कि टाइपस्क्रिप्ट एक प्रकार का मेल नहीं खाता है।

Type 'DefaultClient<unknown>' is not assignable to type 'ApolloClient<object>'.

क्लाइंट अपोलो के टोकन प्रमाणीकरण दस्तावेज़ों

import { ApolloClient } from 'apollo-client';
import { createHttpLink } from 'apollo-link-http';
import { setContext } from 'apollo-link-context';
import { InMemoryCache } from 'apollo-cache-inmemory';

const httpLink = createHttpLink({
  uri: '/graphql',
});

const authLink = setContext((_, { headers }) => {
  // get the authentication token from local storage if it exists
  const token = localStorage.getItem('token');
  // return the headers to the context so httpLink can read them
  return {
    headers: {
      ...headers,
      authorization: token ? `Bearer ${token}` : "",
    }
  }
});

export const client = new ApolloClient({
  link: authLink.concat(httpLink),
  cache: new InMemoryCache()
});

मैं वास्तव में क्लाइंट को आयात करता हूं और इसे म्यूटेशन का उपयोग करने के विकल्प के रूप में आपूर्ति करता हूं।

import {useMutation} from '@apollo/react-hooks'
import {client} from './client'

const MY_QUERY = `
  ...
`

const [myQuery] = useMutation(MY_QUERY, {
  client: client,
  onCompleted: () => {
    // do some stuff..
  }
})

UseMutation एक और प्रकार की अपेक्षा कर रहा है जो अनुमान लगाया गया है। मैं इस बेमेल को कैसे हल कर सकता हूं?

1
David B. 31 मार्च 2020, 19:45

1 उत्तर

सबसे बढ़िया उत्तर

ऐसा लगता है कि आपके पास InMemoryCache टाइप पैरामीटर के रूप में होना चाहिए:

export const client = new ApolloClient<InMemoryCache>({

मैंने यह समझने की कोशिश की है कि इस पैरामीटर का उपयोग कैसे किया जाता है, और मैं इसे पूरी तरह से समझ नहीं पा रहा हूं। ईमानदारी से, खाली वस्तु भी ठीक काम करती प्रतीत होती है:

export const client = new ApolloClient<{}>({

लेकिन स्रोत कोड को पढ़ते समय ऐसा लगता है कि वह कैश प्रकार चाहता है।

1
Klas Mellbourn 31 मार्च 2020, 17:04