Как сохранить состояние компонента React и Apollo в синхронизации после обновления кеша Apollo - PullRequest
0 голосов
/ 26 октября 2018

У меня есть компонент с данными формы.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);

Это не идеально.Буду признателен за любую помощь в поиске способа преодоления этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...