问题描述
我正在尝试使用新的中继挂钩,但收到此错误:
import React,{ Fragment,Suspense,useEffect } from 'react';
import Banner from './banner/Banner.react';
const { graphql,useQueryLoader,usePreloadedQuery } = require('react-relay/hooks');
const query = graphql`
query HomeQuery {
viewer {
id
email
...Banner_viewer
}
}
`;
const HomeContainer = () => {
const [queryReference,loadQuery] = useQueryLoader(query);
useEffect(() => {
loadQuery({});
// eslint-disable-next-line react-hooks/exhaustive-deps
},[]);
return (
<Suspense fallback="Loading...">
<Fragment>
<Home queryReference={queryReference} />
</Fragment>
</Suspense>
);
};
const Home = ({ queryReference }) => {
const data = usePreloadedQuery(query,queryReference);
console.log('data:',data);
return (
<>
<banner viewer={data?.viewer} />
<div>HOME PAGE</div>
</>
);
};
export default HomeContainer;
错误:
usePreloadedQuery.js:38 Uncaught TypeError: Cannot read property 'fetchKey' of null
at usePreloadedQuery (usePreloadedQuery.js:38)
at Home (Home.jsx:34)
解决方法
您需要检查 queryReference
是否不为 null,因此您不要在 Home 组件中使用 null 值调用 usePreloadedQuery
。尝试:
return (
<Suspense fallback="Loading...">
<Fragment>
{queryReference != null && <Home queryReference={queryReference} />}
</Fragment>
</Suspense>
);