169 похожих чатов

Ребят, привет! А подскажите как лучше лучше организовать работу с локальным

хранилищем данных в apollo-client.
Сейчас в React собрал историю с apollo cache.writeQuery, но сталкиваюсь с тем, что не всегда актуальные данные доступны, то есть при чтении (через useQuery) остаются старыми, хотя я сделал запись новых.
Можете подсказать куда копнуть?

2 ответов

13 просмотров

Ну если ты все состояние обновляешь через writeQuery, оно не будет устаревшим, или извне происходят обновления?

Dmitriy-Pashkevich Автор вопроса
Олег Линьков
Ну если ты все состояние обновляешь через writeQue...

Условно говоря, у меня есть вот такой хук: Я обновляю, только часть состояния для запроса: STORE_userDataFromServer или STORE_userDataFromToken export const useStoreUser = (): IUseStoreUser => { const apolloClient = useApollo() const cache = apolloClient?.cache const { data: userDataFromServerGql, loading: userDataFromServerLoading } = useQuery(STORE_userDataFromServer) const { data: userDataFromTokenGql, loading: userDataFromTokenLoading } = useQuery(STORE_userDataFromToken) const userDataFromServer = userDataFromServerGql?.userDataFromServer || userStore.userDataFromServer const userDataFromToken = userDataFromTokenGql?.userDataFromToken || userStore.userDataFromToken /** * Записать данные пользователю полученные с Apollo Server * * @param {TypeUserDataFromServer} userDataFromServerInput */ const writeUserDataFromServer = (userDataFromServerInput: TypeUserDataFromServer) => { cache.writeQuery({ query: STORE_userDataFromServer, data: { userDataFromServer: { ...userDataFromServer, ...userDataFromServerInput, personal: { ...userDataFromServer.personal, ...userDataFromServerInput.personal, }, subscription: { ...userDataFromServer.subscription, ...userDataFromServerInput.subscription, }, }, }, }) } /** * Записать данные пользователя полученные из Token * * @param {TypeUserDataFromToken} userDataFromTokenInput */ const writeUserDataFromToken = (userDataFromTokenInput: TypeUserDataFromToken) => { cache.writeQuery({ query: STORE_userDataFromToken, data: { userDataFromToken: { ...userDataFromToken, ...userDataFromTokenInput, }, }, }) } /** * Разлогинить пользователя */ const logout = () => { writeUserDataFromServer(userStore.userDataFromServer) writeUserDataFromToken(userStore.userDataFromToken) } return { writeUserDataFromServer, writeUserDataFromToken, userDataFromServer, userDataFromToken, userDataFromServerLoading, userDataFromTokenLoading, logout, } } Запись данных я вызываю на верху приложения, к примеру через writeUserDataFromServer. Когда обращаюсь к данным, в каком-то из компонетов - userDataFromServer, где-то null, а где-то корректные данные.

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
DS
8
Карта сайта