ApolloClient: Как синхронизировать кеш Apollo после обновления на сервере? - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь синхронизировать кеш apollo после обновления на сервере. Должен ли я записывать в кэш напрямую или я могу получать только обновленные данные?

Я пытаюсь восстановить только обновленные данные, но все еще не работает.

У меня есть запрос programs(title: String), который выбирает все программы, если заголовок пуст, см. Код ниже:

class Programs extends React.Component {
  render() {
    const FIND_PROGRAMS = gql`query findPrograms($title: String) {
      programs(title: $title) {  id title description }
    }`

    return (
      // The query fetch all programs if title is empty
      <Query query={FIND_PROGRAMS} variables={{ title: '' }}> 
        {({ data, error, loading, refetch }) => {
          if (loading) return <span>Loading</span>
          if (error) return <span>{error.message}</span>

          return (
            <div>
              { data.programs.map(program => <ProgramSummary program={program} />)}

              <button
                onClick={() => axios
                  .patch('path/to/endpoint', payload)
                  .then(updatedProgram => {
                    // Should I update the cache myself with something like this ?
                    // client.writeData(...) 

                    // Or should I refetch only updated Program like this ?
                    refetch({ title: updatedProgram.title }) // Not working yet
                  })
                }
              >
                UpdateProgram
              </button>
            </div>
          )
        }}
      </Query>
    )
  }
}

Моя повторная проверка не работает, я должен делать что-то не так. Пожалуйста, помогите.

1 Ответ

0 голосов
/ 26 апреля 2019

Я думаю, что неработающее поведение связано с тем, что вы пытаетесь обновить конкретный объект (обновленные данные), передавая GraphQL массив объектов (это то, что возвращает ваш запрос и, следовательно, ваше обновление). Я имею в виду, что вы не просите кого-то что-то обновить, а затем даете им кучу вещей, вы просто даете тот конкретный элемент, который хотите обновить.

Я бы предложил вместо этого использовать мутацию, чтобы обновить данные, и вы автоматически обновите данные, как сказано в документации, что более или менее соответствует тому, что я говорил ранее.

"[...] Если вы обновляете отдельный элемент, вам обычно не требуется функция обновления, если вы возвращаете идентификатор элемента и свойство, которое вы обновили [...]".

См. https://www.apollographql.com/docs/react/essentials/mutations#update.

Надеюсь, я тебе помог.

...