Вот сценарий:
ПОЛЬЗОВАТЕЛЬ 1
Вот запрос:
const PROFILE_QUERY = gql`
query profileQuery($id: ID!) {
getUser(id: $id) {
firstName
lastName
email
}
}
`;
export default graphql(PROFILE_QUERY, {
options: {
variables: {
id: localStorage.getItem("id")
},
errorPolicy: "all"
}
})(ProfilePage);
Итак, у первого пользователя все работает, теперь второй пользователь заходит на тот же компьютер и в тот же браузер.
ПОЛЬЗОВАТЕЛЬ 2
Если я обновляю браузер, запрос отправляется с правильным идентификатором пользователя ...
Так почему же переменная id не обновляется (похоже, что значение id в локальном хранилище не читается) с первой попытки? Как я могу это решить?
Спасибо за помощь.


После выхода первого пользователя из системы необходимо сбросить хранилище Apollo и очистить локальное хранилище.
Это происходит потому, что ваше поле options является статическим и оценивается при первой загрузке файла, содержащего запрос. (Я предполагаю, что где-то, возможно, на шагах 3 или 4, id в локальном хранилище правильно обновляется для второго пользователя.)
config.options может быть объектом, подобным тому, который вы сейчас передаете, или функцией, которая при необходимости оценивается запросом.
Итак, чтобы загружать id из localStorage каждый раз, а не один раз, вы можете сделать что-то вроде этого:
options: () => ({
variables: {
id: localStorage.getItem("id")
},
errorPolicy: "all"
})
Ваш ответ идеален, я не знал об этом! Большое спасибо Tal Z, мой запрос теперь работает отлично!
Спасибо за ваш ответ, нет, я не упоминал об этом, но я уже сбросил хранилище Apollo с помощью «this.props.client.resetStore» и удаляю элементы из локального хранилища.