8

我正在尝试使用以下代码一次执行 urql useQuery 。但由于某种原因,每次重新渲染都会调用它。

根据文档https://formidable.com/open-source/urql/docs/basics/queries/#pausing-usequery ,此查询最初应在渲染时暂停,并且仅在从 React.useEffect 调用时才应执行山。

const [{ fetching, data, error }, reExecute] = useQuery({
  query: INITIAL_CONFIG_QUERY,
  pause: true
});

React.useEffect(() => {
  reExecute();
}, []);

使用 urql 一次执行查询的最佳方法是什么?

4

2 回答 2

7

Urql 维护者在这里,我假设如果组件不断重新安装,就会发生额外的事情。这个钩子不应该让包装组件重新挂载。

话虽如此,您始终可以使用该useClient挂钩来获取 urql-client,然后client.query().toPromise()在该挂钩中使用并使用返回的结果。

在您的情况下,这可能是:

const MyComponent = () => {
  const client = useClient();
  useEffect(() => {
     client.query(
       INITIAL_CONFIG_QUERY
     ).toPromise().then(result => /* do something */)
  }, [])
}
于 2020-07-27T12:14:22.710 回答
0

这可能是一个 urlq 错误,但也可能是每次父组件重新呈现时您的组件都被卸载并重新安装。

要对此进行测试,请添加:

React.useEffect(() => {
  console.log("Component was mounted.");
}, []);

并查看 console.log 语句是否被多次打印。

于 2020-07-30T05:37:56.550 回答