reactjs - 在 history.push 之后中继 fetchQuery 不起作用,但在手动刷新时可以正常工作
问题描述
Header
我正在开发一个带有身份验证的 react-relay-graphql 应用程序,我想在组件(导航)中显示新消息计数。这是Login
组件代码:
...
LoginMutation(username, password)
.then((resp) => {
if (resp.token) {
this._saveUserData(resp.expiredAt, resp.token)
fetchQuery(environment, query, {})
.then(data => {
const me = data.user.me;
this.setState({
Auth: {
user: {
fullName: me.fullName,
username: me.username,
isSeniorUser: me.isSeniorUser
}
}
})
this.props.setUser(this.state.Auth.user) // Redux
this.props.history.replace('/dashboard')
});
}
})
_saveUserData = (expiredAt, token) => {
localStorage.setItem(GC_USER_EXPIRES_AT, expiredAt)
localStorage.setItem(GC_AUTH_TOKEN, token)
}
...
这是Header
组件(它在Dashboard
组件内部)
class Header extends Component {
componentDidMount() {
this.getMessagesCount()
}
getMessagesCount() {
fetchQuery(environment, NewMessagesQuery, {})
.then(data => {
const newMessagesCount = data.message != null ? data.message.countNewMessages.newMessages : '';
this.props.setNewMessagesCount(newMessagesCount) // Redux
});
}
render() {
return (
<>
{this.props.newMessages}
</>
)
}
}
问题是在History.push
它显示仪表板但fetchQuery
甚至没有运行并返回data = {messages: null}
之后,但是当页面手动刷新时,它可以工作并返回新消息计数。
解决方案
我想到了。万一有人遇到这个问题,我的缓存配置Environment.js
是错误的。所以它试图为每个请求从缓存中读取数据。
推荐阅读
- ios - TMDb api 调用 - Swift
- swift - 当我只喜欢一张图片时,为什么我的喜欢按钮会喜欢我所有的图片?
- python-3.x - `quote_ident()` 和 psycopg2 中的参数化查询之间有区别吗?
- asp.net - 将 hid aspx ext 添加到 URL 重写后 IIS 不安全
- python - 使用 python、BeautifulSoup、Selenium 从表中抓取动态数据
- javascript - 如何将变量分配给由 lit-html 创建的 DOM 节点
- go - 如何删除 GoLand 中的“#gosetup”行?
- c# - 在存储帐户的天蓝色表中读取一行
- r - 如何在R中制作包含组和多个变量的条形图
- c++ - 有没有办法通过串行连接从 Processing 到 Arduino IDE 同时传输整个阵列?