У меня есть компонент с данными формы.Query
используется для извлечения данных.Существует Mutation
для изменения данных.Измененные входные значения хранятся в компоненте React с использованием setState
.
. Проблема теперь в том, что у меня есть некоторое состояние в Apollo и некоторое состояние в компоненте React - и вместе они представляют мое состояние.Мне нужно, чтобы они были синхронизированы, то есть они должны быть изменены как атомарные операции и запускать ровно один рендер.
У меня сложилось впечатление, что apollo-link-state
был ответом для состояния клиента, и я попыталсяпереопределите форму, используя это.Хотя это решило эту конкретную проблему, это было более подробное решение, производительность была намного хуже, и я решил по этим причинам вернуться к использованию setState
.
A dirtyхак, который я делаю сейчас, пишет в кеш Apollo, а затем обновляет состояние компонента ReactХотя он, кажется, работает для этого компонента и способа, которым он используется в настоящее время, он может привести к условиям гонки, и состояние будет недействительным, пока оба не будут обновлены (учитывая, что они заканчивают выполнение в порядке, который можно было ожидать).Прямо сейчас мой Mutation.update
метод заканчивается так:
cache.writeQuery({
query: GET_TODOS,
data: nextState
});
setTimeout(() => {
this.setState({
changedTodos: {},
});
}, 500);
Это не идеально.Буду признателен за любую помощь в поиске способа преодоления этой проблемы.