我正在尝试执行不需要的操作。理想情况下,我不需要在GraphQL调用之后进行REST调用,但这就是事实。每当我为某个对象获取某些东西时,它都会将提到的人带到一个数组中,而我需要另一个API上的信息来为每个人扩充。
现在,我一直在阅读有关skip选项的信息,这可能会很好,但是由于我需要知道要调用多少“钩子”,而我显然不知道,所以我有点卡在了那里。我天真地做了一个钩子,但是它不起作用,因为它在useEffect
上中继,而在SSR上不起作用。
function useExtraQuery(loading, data, query) {
const [pending, setPending] = useState(!!query);
const [value, setValue] = useState(null);
const [error, setError] = useState(null);
const client = useApolloClient();
const execute = useCallback(() => query(client, data)
.then(response => setValue(response))
.catch(e => setError(e))
.finally(() => setPending(false)), [query]);
useEffect(() => {
if (pending && !loading) {
execute();
}
}, [loading, execute]);
return { pending, value, error };
}
我的想法是要这样:
const { loading, error, data } = useQuery(query, getParams(params));
const extraQuery = useExtraQuery(loading, data, getAdditionalData);
if (loading || extraQuery.pending) {
return null;
}
因此,一旦数据加载完成,另一个将执行并且应该只返回Promise。一旦完成,所有这些都将允许渲染发生。 除了修改服务器以及所有这些以外,我该如何完成类似的事情?