初始查询后对SSR进行N个查询

时间:2020-05-05 20:30:35

标签: javascript reactjs graphql react-apollo apollo-client

我正在尝试执行不需要的操作。理想情况下,我不需要在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。一旦完成,所有这些都将允许渲染发生。 除了修改服务器以及所有这些以外,我该如何完成类似的事情?

0 个答案:

没有答案