gpt4 book ai didi

reactjs - 如何限制 useQuery 的 api 调用只能调用一次?

转载 作者:行者123 更新时间:2023-12-04 12:32:26 24 4
gpt4 key购买 nike

我有以下组件,它有一个 date多变的。在每次重新渲染时,date变量正在更新。现在的问题是,当我将日期分配给查询变量时,graphql 一次又一次地无限获取。我调试了代码,发现 apollo 正在观察 date变量,当它接收到一个新值时,它是重新。

import React from 'react';
import { getISODate } from '../../dateUtils';
import { useQuery } from '@apollo/react-hooks';
import { GET_EXPENSE_STATUS } from '../../queries';
import get from 'lodash/get';

const ExpenseStatus = (props) => {
const date = getISODate(); // returns current date as ISO String Format
const { loading, error, data } = useQuery(GET_EXPENSE_STATUS, {
variables: {
date
}
});
if (error) return <p>Error :(</p>;
return(
<div>
{get(data, 'expenseStatus.value')}
</div>
);
};
我也试过 useLazyQuery .但没有运气。
 const date = getISODate(); // returns current date in ISO String

const [loadExpenseStatus, { loading, error, data }] = useLazyQuery(GET_EXPENSE_STATUS, {
variables: {
date
}
});

useEffect(() => {
if(!called) {
loadExpenseStatus();
}
}, []);
那么,有什么办法,我可以跳过这个观察者吗?我只想收到一次 fetch 电话。

最佳答案

两种可能的解决方案,第一种(初始值“卡住”):

const [staticDate] = useState( getISODate() );
const { loading, error, data } = useQuery(GET_EXPENSE_STATUS, {
variables: {
date: staticDate
}
});
或简单 const [date] = useState( getISODate() );variables: { date } ... 当 date与其他地方需要的当前值。
第二个(当输出/渲染中不需要“日期”值时):
const [loadExpenseStatus, { loading, error, data }] = useLazyQuery(GET_EXPENSE_STATUS);

useEffect(() => {
loadExpenseStatus( {
variables: {
date: getISODate()
}
} );
}, []); // called once
文档: https://www.apollographql.com/docs/react/data/queries/#executing-queries-manually

关于reactjs - 如何限制 useQuery 的 api 调用只能调用一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64405463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com