我使用的是最优秀的钩子,特别是useQuery react-apollo-hooks library:
function Index() {
...
const [dialogOpen, setDialogOpen] = useState({ show: false, id: '0' });
...
const { data, error } = useQuery(GET_JOBS, { suspend: true });
if (error) {
return <div>Error! {error.message}</div>;
}
const jobs = data.cxJobs; //This is our data
....
function editCallback(e, more) {
setDialogOpen({ show: true, id: e });
}
....
}当然,只要我更改了dialogOpen状态,组件就会重新呈现,graphql查询就会再次执行。根据对库github repo的建议,我重写了代码,以便与useEffect一起设置一些状态:
function Index() {
...
const [dialogOpen, setDialogOpen] = useState({ show: false, id: '0' });
const [jobs, setJobs] = useState([]);
useEffect(_=> {fetchData()}, []);
const fetchData = async _ => {
const result = await client.query({query:GET_JOBS});
setJobs(get(['data','cxJobs'], result));
}
async function onEventChanged(id, event) {
await mutateOne(client, jobGQL, eventToJob(event));
}
...
}这是非常好的。
发布于 2020-09-30 02:21:05
你可以做这样的事情。此外,您可能还希望避免将查询结果设置为useState,而直接使用数据。
const [skip, setSkip] = React.useState(false)
const { loading, data } = useQuery(QUERY, { skip })
React.useEffect(() => {
// check whether data exists
if (!loading && !!data) {
setSkip(true)
}
}, [data, loading])@Robert,我发现你在apollo-hooks github上提出了这个问题。我发现有一个答案帮助我解决了这个问题,因此也在这里添加了它,这样它就可以帮助其他人。
https://stackoverflow.com/questions/56064366
复制相似问题