【发布时间】:2021-01-31 22:31:09
【问题描述】:
我关注的组件有一个date 变量。在每次重新渲染时,date 变量都会更新。现在的问题是,当我将日期分配给查询变量时,graphql 一次又一次地无限获取。我调试了代码,发现apollo正在观察date变量,当它接收到一个新值时,它是re。
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() )- 触发一次 - 作为变量参数 (date: staticDate) -
你不需要 lodash 来防止未定义的数据 .. 只需在主返回之前使用
if(loading) return "loading"; -
它不重复:)
-
除了引入状态变量,还有其他选择吗? @xdam。我知道加载部分。但我不想要那个
标签: reactjs graphql react-apollo apollo-client