apollographql - изменения записей в объектах в локальном состоянии и повторный рендеринг? - PullRequest
0 голосов
/ 31 марта 2019

Допустим, у меня есть объект в моем локальном состоянии и 2 типа запросов к этому объекту: -

anObject {

__typename: "AnObject"

thisThing: ""

thatThing: "" }

Запрос 1

{

anObject @client

}

Запрос 2

{

anObject @client {

thisThing }

}

2 сценария: -

Компонент выполнял Query 1, но не использует anObject.thatThing в своей функции рендеринга.

Компонент выполнял запрос 2 (который не запрашивает этот запрос).

Теперь, скажем, другой компонент мутировал anObject.thatThing. Я бы предположил, что сценарий 1 вызовет повторную визуализацию компонента, поскольку он подписан на весь этот объект в локальном состоянии (через Query 1), тогда как в сценарии 2 компонент не выполнит повторную визуализацию, если мутирует anObject.thatThing, поскольку он только подписаться на один (другой) фрагмент этого объекта. Это правильно?

1 Ответ

1 голос
/ 31 марта 2019

У вас неверные предположения.

Стандартный Query не является Subscription или ObservableQuery - это однократный запрос, он не будет вызывать автоматическое обновление / повторное получение / визуализацию при внешних изменениях.

Вы можете использовать перечисленные выше опции или [самый простой] pollInterval вариант.

Для более глубоких обновлений объектов следует использовать метод shouldComponentUpdate.


UPDATE

Директива

@client изменяет поведение запросов по умолчанию. Из документов:

Как только вы вызовете client.writeData, результат запроса в функции рендеринга будет автоматически обновлен.

Может выглядеть как подписка, но это не так. Запрос повторяется в обоих случаях. Рендеринг дочернего компонента зависит от изменений его реквизита. Он не будет повторно отображаться, если пропущенные объекты не изменятся - для того же результата запроса или передачи / использования только неизмененных фрагментов результата (свойств объекта).

...