Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
754 views
in Technique[技术] by (71.8m points)

javascript - Relay: Cannot read property 'fetchKey' of null

Im trying to use the new relay hooks but getting this error:

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;

Error:

usePreloadedQuery.js:38 Uncaught TypeError: Cannot read property 'fetchKey' of null
    at usePreloadedQuery (usePreloadedQuery.js:38)
    at Home (Home.jsx:34)
question from:https://stackoverflow.com/questions/65855736/relay-cannot-read-property-fetchkey-of-null

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You need to check if queryReference is not null, so you don't call usePreloadedQuery with a null value in your Home component. Try with:

return (
  <Suspense fallback="Loading...">
    <Fragment>
      {queryReference != null && <Home queryReference={queryReference} />}
    </Fragment>
  </Suspense>
);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...