javascript - 使用 Apollo 客户端更新缓存数据 - ReactJS
问题描述
我正在尝试使用 ReactJs、GraphQL 和 NodeJs 构建 HackerNews Clone,到目前为止,我能够实现很多东西,但是我在尝试更新链接以便用户查看更改时遇到了困难更新页面。与此过程相关的两个查询是变异 VOTE_MUTATION,它使用户可以对我的查询 LINKS_FEED 中的链接进行投票。它有效,但我必须刷新页面才能看到更改。这是我试图做的
查询
变异 VOTE_MUTATION
export const VOTE_MUTATION = gql`
mutation VoteMutation($linkId: ID!) {
vote(linkId: $linkId) {
id
link {
id
votes {
id
user {
id
}
}
}
user {
id
}
}
}
`;
查询 LINKS_FEED
export const LINKS_FEED = gql`
query LinksFeed {
feed {
count
links {
id
description
url
postedBy {
id
name
}
votes {
id
user {
name
}
}
}
}
}
这就是我的 API 调用的样子
const [upvoteLink, { data }] = useMutation(VOTE_MUTATION);
const voteLink = async (linkId) => {
try {
await upvoteLink({
variables: { linkId },
update: (cache, { upvoteLink }) => {
const currentData = cache.readQuery({ query: LINKS_FEED });
const newData = {...currentData}
newData.feed = {...currentData.feed}
newData.feed.links = [...currentData.feed.links, upvoteLink];
cache.writeQuery({ query: LINKS_FEED }, newData);
},
});
} catch (err) {
alert(err.message);
}
};
解决方案
推荐阅读
- azure - Azure 从 blob 还原 SQL Server 数据库
- c++ - Boost无锁队列正在触发clang的线程清理器
- java - Vaadin 无法更改按钮颜色
- python - 在 Mastermind 游戏中重复功能的问题
- node.js - UnhandledPromiseRejectionWarning:TypeError:无法设置未定义的属性“”
- php - 无法让 .htaccess 在 Laravel 应用程序中正确执行 301 重定向
- python - 无法使用 Jupyter 在 Visual Studio Code 中运行 Python 代码 - “无法从‘Python 3.6.8 64 位’启动 Jupyter 内核”
- php - 如何将php错误的日志记录设置为页面而不是错误日志?
- spring - MongoRepository 的 saveAll() 是批量插入数据吗?
- php - PHP:获取 ICU 版本