Мое приложение делает глубокий запрос для получения объекта path
по идентификатору и передает результаты через различные реквизиты реакции. Среди прочего, path
имеет список steps
. Мутация может добавить дополнительные step
в список path.steps
.
Я делаю мутацию, а затем обновляю кеш. После этого я могу проверить кеш InMemoryCache и увидеть, что элемент действительно был добавлен. Я не получаю предупреждений. Вот как выглядит соответствующий кусок
const { steps } = cache.readFragment({
id: `Path:${pathId}`,
fragment: PathLogFragment,
fragmentName: 'PathLogFragment'
})
cache.writeFragment({
id: `Path:${pathId}`,
fragment: PathLogFragment,
fragmentName: 'PathLogFragment',
data: { __typename: 'Path', steps: [...steps, addStep] }
})
Теперь у меня есть один компонент, который потребляет шаги и не обновляется. Это довольно просто, с steps.map(s => <li>step</li>)
. Называется так: {path.steps && <Steps steps={path.steps} />}
Есть реквизиты рендеринга, участвующие в получении path
и его перемещении, и есть PureComponents на подходе, но нет вызовов shouldComponentUpdate
.
Я в растерянности. Что еще я могу проверить?
readFragment
для предоставления данных запроса вашему компоненту, ваш компонент не будет обновляться при изменении кеша, потому что он разработан как одноразовый метод доступа для чтения и не создает наблюдаемый запрос. Подробнее см. в этом ответе: stackoverflow.com/a/50349323/6024220 - person Daniel Rearden   schedule 15.05.2018<Query/>
, связанный с корневым запросом, который включает в себя полный набор выбора, включая все рассматриваемые реквизиты, которые не обновляются. Итак, в дополнение к вашему другому ответу, что запросы (даже если они не опрашиваются) реагируют на обновления кэша, почему мой корневой запрос не обновляет реактивно реквизиты после изменения writeFragment и не дает обновления моих нижестоящих компонентов? - person bebbi   schedule 15.05.2018writeFragment
обновляет только этот конкретный ключ в кеше, но не обновляет ни один из запросов, которые фактически его сгенерировали. Поскольку запрос, который использует ваш компонентQuery
, не изменен, он не вызывает обновления ни для каких наблюдателей, подписавшихся на него. В документах специально указано использованиеwriteQuery
, а неwriteFragment
при обновлении кеша после мутации. - person Daniel Rearden   schedule 16.05.2018