假设我有一个像这样的简单数据模型
User
- email
- password
- Profile
- profile_image
- address
- phone_number
当我访问用户的个人资料页面时,我使用useQuery并从服务器查询用户
const ME = gql`
query {
me {
email
profile {
profileImage
address
phoneNumber
}
}
`;
const {loading, data, refetch} = useQuery(ME);
当我想更新个人资料时。我会做的
const UPDATE_PROFILE = gql`
mutation($profileImage: String!, $address: String!, $phoneNumber: String!) {
updateProfile(profileImage: $profileImage, address: $address, phoneNumber: $phoneNumber) {
profileImage
address
phoneNumber
}
}
`;
const [updateProfile, {loading}] = useMutation(UPDATE_PROFILE, {
onCompleted(data) {
// Refetch to refresh whole user data
refetch();
}
}
我只想在页面中显示新的更新的用户信息,所以我要做的是从useQuery(ME)调用refetch()
。
但是我发现我可以使用doc中的refetchQueries()。 哪个是更好的选择?它们之间有什么区别?
答案 0 :(得分:0)
refetchQueries
和refetch
之间的区别:
refetchQueries
:您可以在发生突变后重新获取所有查询,包括您的ME
查询或其他查询,例如getMessageList
,getListUser
,...
refetchQueries
是更新缓存的最简单方法。使用refetchQueries
,您可以指定一个或多个要在突变完成后运行的查询,以重新获取可能已受到该突变(refetchQueries doc)影响的商店部分。>
refetch
:使用ME
就是refetch
的结果之一时,您只能重新查询useQuery(ME)
。
该函数可让您重新查询并可选地传入新变量(refetch doc)。
如果您要重新获取ME
数据,可以使用refetch
。另一方面,如果要更新其他查询,则应使用refetchQueries
。
根据我的经验,我更喜欢在突变后使用refetchQueries
,而不是使用refetch
。