我正在尝试使用以下代码一次性执行urql-useQuery。但由于某种原因,它在每次重新渲染时都会被调用。
根据文件https://formidable.com/open-source/urql/docs/basics/queries/#pausing-使用查询这个查询最初应该在渲染时暂停,只有在装载时从React.useEffect调用时才应该执行。
const [{ fetching, data, error }, reExecute] = useQuery({
query: INITIAL_CONFIG_QUERY,
pause: true
});
React.useEffect(() => {
reExecute();
}, []);
使用urql一次性执行查询的最佳方式是什么?
Urql维护人员,我认为如果组件继续重新安装,就会发生额外的事情。此挂钩不应使包装部件重新安装。
也就是说,您总是可以使用useClient
钩子来获取urql客户端,然后在该钩子中使用client.query().toPromise()
并使用返回的结果。
在您的情况下,这可能是:
const MyComponent = () => {
const client = useClient();
useEffect(() => {
client.query(
INITIAL_CONFIG_QUERY
).toPromise().then(result => /* do something */)
}, [])
}
这可能是一个urlq错误,但也可能是您的组件在每次父组件重新发送时都被卸载和重新装载。
要对此进行测试,请添加:
React.useEffect(() => {
console.log("Component was mounted.");
}, []);
并查看console.log语句是否被打印多次。