Существует ли простой способ управления локальным состоянием с Apollo Client 2.5 для React?Что такое «чтение» эквивалентно «client.writeData»? - PullRequest
3 голосов
/ 01 мая 2019

Я изучаю возможности локального управления состоянием 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.

Я явно не вижулес за деревьями, и будем рады любым советам.

1 Ответ

2 голосов
/ 22 мая 2019

У вас это почти получилось, вы просто забыли передать данные в объект данных вместо прямой ==>

client.writeData ({data: {isLoggedIn: false}});

...