gpt4 book ai didi

react-hooks - 渲染的钩子(Hook)比上一次渲染时更多

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

如何使用带有 react-apollo-hooks 的 2 个 graphql 查询,其中第二个查询取决于从第一个查询中检索到的参数?

我尝试使用如下所示的 2 个查询:

const [o, setO] = useState()

const { loading: loadingO, error: errorO, data: dataO } = useQuery(Q_GET_O, { onCompleted: d => setO(d.getO[0].id) });

if (loadingO) { return "error" }

const { loading: loadingOP, error: errorOP, data: dataOP } = useQuery(Q_GET_OP, { variables: { o } })

但是,当我运行我的项目时,react-hooks 会给我以下消息:

"index.js:1437 警告:React 检测到 Upgrade 调用 Hooks 的顺序发生了变化。如果不修复,这将导致错误和错误。有关更多信息,请阅读 Hooks 规则"

我想知道如何使用 react-apollo-hooks 来运行依赖于另一个查询的查询。如果事先知道 graphql 查询变量,它会很好用。但是,对于来自其他查询的变量,我没有找到解决方案。

最佳答案

这里的问题是,在所有钩子(Hook)有机会运行之前,您已经短路返回。

如果你在所有钩子(Hook)有机会被调用之前退出渲染函数,React 会报错。

例如:

function BrokenFoo () {
const query = useSomeQuery();
if (query.loading) return <Loading />

// This will cause some issues because
// it's possible that we return before our useState hook gets called

const [bar, setBar] = useState();

return <SomeComponent bar={bar} setBar={setBar} data={query.data} />
}

修复:

function FixedFoo () {
// This will be fine because
// all of the hooks have a chance to be called before a return
const query = useSomeQuery();
const [bar, setBar] = useState();

if (query.loading) return <Loading />

return <SomeComponent bar={bar} setBar={setBar} data={query.data} />
}

关于react-hooks - 渲染的钩子(Hook)比上一次渲染时更多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57560352/

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