【发布时间】:2021-02-05 23:50:33
【问题描述】:
- 我有一个主页 (
/home),其中包含作为卡片的产品列表(已检索 通过useQuery) 每个都有一个upvote按钮 - 当我点击upvote时, 我触发了一个突变来投票 + 一个 UI 更改来更新投票 计数
- 当我转到另一个页面,然后返回
/home,useQuery没有检索到票数正确的产品 - 但是,当我检查我的数据库时,所有产品都有正确的投票 数。
为什么useQuery 在我做另一页之前不返回正确的金额
刷新?
供参考,如下:
const Home = props => {
const {data, loading, error} = useQuery(GET_PRODUCTS_LOGGED_IN, {
variables: {
userid: props.userid
}
});
console.log(
'data', data.products // this data is outdated after I go from /home -> /profile -> /home
);
return (
<Container>
{_.map(data.products, product => (
<VoteButton
hasVoted={product.hasVoted}
likes={product.likes}
productid={product.productid}
/>
))}
</Container>
);
}
const VoteButton = ({likes, hasVoted, productid}) => {
const [localHasVoted, updateLocalHasVoted] = useState(hasVoted);
const [likesCount, updateLikesCount] = useState(likes);
const [onVote] = useMutation(VOTE_PRODUCT);
const onClickUpvote = (event) => {
onVote({
variables: {
productid
}
})
updateLocalHasVoted(!localHasVoted);
updateLikesCount(localHasVoted ? likesCount - 1 : likesCount + 1);
}
return (
<VoteContainer onClick={onClickUpvote}>
<VoteCount >{likesCount}</VoteCount>
</VoteContainer>
);
};
【问题讨论】:
-
你可能在你的 apollo 客户端中使用了缓存,你需要手动更新它,这很烦人:apollographql.com/docs/react/data/mutations/…
-
啊,我讨厌这个
-
如果您不想与 ['annoying'] 缓存更新“对抗”,请使用“仅限网络”策略