Я следил за клиентскими документами Apollo в локальном штате.
Я реализовал очень простой запрос кеша клиента:
export const GET_USER_ACCOUNTS = gql`
query GetUserAccounts {
userAccounts @client
name @client
}
`;
userAccounts
и name
оба хранятся в моем кэше после аутентификации:
<Mutation
mutation={API_TOKEN_AUTHENTICATION}
variables={{ apiKey }}
onCompleted={({
apiTokenAuthentication: {
token,
userAccounts,
user: { givenName, familyName },
},
}) => {
localStorage.setItem('token', token);
client.writeData({
data: {
isLoggedIn: true,
userAccounts,
name: `${givenName} ${familyName}`,
},
});
}}
>
и я подогрел кеш значениями по умолчанию:
import { ApolloClient } from 'apollo-client';
import { InMemoryCache } from 'apollo-cache-inmemory';
import { HttpLink } from 'apollo-link-http';
const cache = new InMemoryCache();
const link = new HttpLink({
uri: 'http://localhost:8002/v1/graphql',
headers: {
Authorization: `${localStorage.getItem('token')}`,
},
});
const client = new ApolloClient({
cache,
link,
});
// set up the initial state
cache.writeData({
data: {
name: '',
userAccounts: [],
isLoggedIn: !!localStorage.getItem('token'),
},
});
export default client;
Я не включил никаких локальных распознавателей, так как в документации указано:
Когда клиент Apollo выполняет этот запрос и пытается найти результат для поля isInCart, он выполняет следующие шаги:
Была ли установлена функция распознавателя (либо с помощью параметра преобразователей конструктора ApolloClient, либо с помощью методов setResolvers / addResolvers клиента Apollo), которая связана с именем поля isInCart? Если да, запустите и верните результат из функции распознавателя.
Если не удается найти подходящую функцию распознавателя, проверьте кэш клиента Apollo, чтобы узнать, можно ли напрямую найти значение isInCart. Если это так, верните это значение.
Однако, несмотря на то, что код работает нормально (он выбирает значения, которые мне не нужны), я все равно получаю это предупреждение:
Найдены директивы @client в запросе, но клиентские распознаватели не указаны. Теперь вы можете передавать средства разрешения состояний apollo-link в конструктор ApolloClient.
Я неправильно понял? Должен ли я каким-то образом включить клиентский распознаватель?
Любой совет приветствуется