gpt4 book ai didi

reactjs - 仅在第一次以惯用方式和优雅方式呈现组件时执行 react-apollo-hooks useQuery

转载 作者:行者123 更新时间:2023-12-03 14:48:52 24 4
gpt4 key购买 nike

我用的是最优秀的react-apollo-hooks library ,特别是 useQuery 钩子(Hook):

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));
}
...
}

这很不错。但我能做得更好吗?

最佳答案

你可以做这样的事情。此外,您可能还希望避免将查询结果设置为 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 上提出了这个问题.而且我发现有一个答案可以帮助我解决这个问题,因此也将其添加到此处,以便它可以帮助其他人。

关于reactjs - 仅在第一次以惯用方式和优雅方式呈现组件时执行 react-apollo-hooks useQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56064366/

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