Я изучаю возможности локального управления состоянием Apollo Client 2.5 и нахожу его довольно запутанным.Что бы это ни стоило, я довольно легко смог понять Apollo Server, но это становится все сложнее.
Я (вроде) понимаю, как его использовать, когда кто-то хочет настроить локальные преобразователи и запросы для чтения локального состояния, но есть ли способ просто установить некоторые локальные переменные состояния, что довольно легко можно сделать сRedux.Например, установить isLoggedIn
как true
по завершении мутации входа?Я попытался это (после https://www.apollographql.com/docs/react/essentials/local-state)
return <Mutation mutation={LOGIN} onCompleted={data => {
if (data && data.login) {
const {login: {token}} = data
if (token) {
history.push('/list')
}
}
}}>
{(register, {data, error, loading, client}) => {
if (error) {
return <div>{error.toString()}</div>
}
if (loading) return <div>Loading...</div>
if (data && data.login) {
const {login: {token}} = data
if (token) {
localStorage.setItem('token', token)
client.writeData({isLoggedIn:true})
}
, но получил ошибку
Ошибка: ошибка записи результата для сохранения для запроса: {"kind": "Document", "определения ": [{" вид ":" OperationDefinition», "операция": "запрос", "название": { "вид": "название", "значение": "GeneratedClientQuery"}, "selectionSet": NULL}]} Невозможно прочитать свойство 'selection' из null
Но я не знаю, правильно ли я использую writeData
. Что более важно, как мне прочитать данные?Похоже, что в API нет соответствующего вызова readData
. Нужно ли настроить запрос GraphQL и выполнить его, чтобы проверить, вошел ли пользователь в систему? Нужно ли тогда создать преобразователь для этого запроса ивключить его при создании клиента Apollo?
Я видел некоторые примеры использования apollo-link-state
, которые казались более простыми, но, видимо, они устарели и включены в Apollo Client 2.5.
Я явно не вижулес за деревьями, и будем рады любым советам.