gpt4 book ai didi

javascript - useLazyQuery - 重新渲染问题

转载 作者:行者123 更新时间:2023-12-02 21:00:11 25 4
gpt4 key购买 nike

要求:

我想在 useEffect 中第一次自动调用查询,然后在函数中手动调用。

Issue: Invarient Violation: Too many re-renders.

 const [getComment, { loading, data }] = useLazyQuery(getCommentsQuery);
useEffect(() => {
getComment({
variables: {
input: {
id: "5e5cb512e90bd40017385305",
},
},
});
}, []);

if (data && data.getPost) {
var allNewComments = data.getPost.comments;
setAllComments(allNewComments); // re-renders
}
我假设

setState 导致了此问题。

最佳答案

功能组件的“主体部分”会在每次更改时运行,需要条件(或 useEffect Hook )来阻止意外行为。

只是不要将 useState 用于 allComments 吗?您可以使用 f.e.

const allNewComments = (data && data.getPost) ? data.getPost.comments : [];

...如果您想迭代allNewComments

如果您仍然想使用 useState (与 useLazyQuery 结合使用)...在 onCompleted 选项/处理程序中使用它,例如:

const [getComment, { loading, data }] = useLazyQuery(getCommentsQuery, {
variables: {
input: {
id: "5e5cb512e90bd40017385305",
},
},
onCompleted: (data) => {setAllNewComments( data.getPost.comments )}

关于javascript - useLazyQuery - 重新渲染问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61374203/

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