I'm learning graphQL and react-relay library.
In these 2 sections:
- Rendering Queries: introduce
usePreloadedQuery
. - Fetching Queries for Render: introduce
useQueryLoader
.
For short, I will say 1st-query
instead of usePreloadedQuery
, 2nd-query
for useQueryLoader
.
Question-1
The 1st-query
will use a graphQL and it's generated flow type, query the server, then return the data. That's OK to me.
The 2nd-query
seems to do the same thing? What's the difference except the library API/syntax?
Question-2
Here's the sample code in the 2nd section:
import type {HomeTabQuery as HomeTabQueryType} from 'HomeTabQuery.graphql';
import type {PreloadedQuery} from 'react-relay';
const HomeTabQuery = require('HomeTabQuery.graphql')
const {useQueryLoader} = require('react-relay');
type Props = {
initialQueryRef: PreloadedQuery<HomeTabQueryType>,
};
function AppTabs(props) {
const [
homeTabQueryRef,
loadHomeTabQuery,
] = useQueryLoader<HomeTabQueryType>(
HomeTabQuery,
props.initialQueryRef, /* e.g. provided by router */
);
const onSelectHomeTab = () => {
// Start loading query for HomeTab immediately in the event handler
// that triggers navigation to that tab, *before* we even start
// rendering the target tab.
// Calling this function will update the value of homeTabQueryRef.
loadHomeTabQuery({id: '4'});
// ...
}
// ...
return (
screen === 'HomeTab' && homeTabQueryRef != null ?
// Pass to component that uses usePreloadedQuery
<HomeTab queryRef={homeTabQueryRef} /> :
// ...
);
}
The line-1 use import type {HomeTabQuery as HomeTabQueryType} from 'HomeTabQuery.graphql'
. And the line-4 use const HomeTabQuery = require('HomeTabQuery.graphql')
.
I don't understand, aren't these 2 lines do the same thing?