问题:
你好,所以我在我的 ReactJS 应用程序上使用 apollo-client 已经有一段时间了。我刚刚注意到,有时当我使用useQuery
钩子时,执行完全忽略了skip
参数,并继续执行onCompleted
(尽管没有任何数据)。有趣的是,它也不会向我的端点发出 API 请求。但是,如果我只是设置skip
为 false,那么一切正常(如预期的那样)。
此外,每次我使用useQuery
with时都不会发生这种情况skip
,它似乎适用于某些而不是其他。
为什么 apollo 会忽略skip
参数并onCompleted
立即使用空数据执行?有没有修复(除了useLazyQuery
)?
代码示例:
const userQuery = useQuery(GET_USER, {
variables: {
value: userId,
},
skip: true,
onCompleted: props => {
console.log(`props => `, props)
const {
user: { type, role, firstName, lastName, permissions },
} = props;
setValue('firstName', firstName);
setValue('lastName', lastName);
setValue(
'type',
userTypes.find(({ value }) => value === type),
);
setValue(
'role',
userRoles.find(({ value }) => value === role),
);
},
});
补充说明:
• 从 onCompleted 函数记录道具的输出是props => undefined
。
• 我添加skip: true
只是为了证明它实际上不起作用。
• 如果我记录userQuery
自己,那么立即在第一个记录上,userQuery.called
等于 true(但就像我之前所说的,实际上没有执行任何 API 调用)
依赖项
"@apollo/react-hooks": "^3.1.5",
"apollo-cache-inmemory": "^1.6.3",
"apollo-client": "^2.6.10",
"apollo-datasource-rest": "^0.6.6",
"apollo-link": "^1.2.13",
"apollo-link-context": "^1.0.19",
"apollo-link-error": "^1.1.12",
"apollo-link-rest": "^0.7.3",
"apollo-link-retry": "^2.2.15",
"apollo-link-token-refresh": "^0.2.7",
"apollo-upload-client": "^11.0.0",
"react": "16.10.2",
"react-apollo": "^3.1.3",
笔记:
useLazyQuery
似乎工作正常,因此作为一种解决方法,同时您可以结合使用它useEffect
来获得类似的结果。