хранилищем данных в apollo-client.
Сейчас в React собрал историю с apollo cache.writeQuery, но сталкиваюсь с тем, что не всегда актуальные данные доступны, то есть при чтении (через useQuery) остаются старыми, хотя я сделал запись новых.
Можете подсказать куда копнуть?
Ну если ты все состояние обновляешь через writeQuery, оно не будет устаревшим, или извне происходят обновления?
Условно говоря, у меня есть вот такой хук: Я обновляю, только часть состояния для запроса: 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, а где-то корректные данные.
Обсуждают сегодня