Queries

GraphQL Query λŠ” GreaphQL μ„œλ²„μ—μ„œ query ν•˜λ €λŠ” 데이터에 λŒ€ν•œ μ„€λͺ…μž…λ‹ˆλ‹€. query λŠ” μ„œλ²„μ— μš”μ²­ν•˜λ €λŠ” ν•„λ“œ μ„ΈνŠΈ ( 잠재적으둜 Fragment)둜 ꡬ성 λ©λ‹ˆλ‹€. 쿼리할 수 μžˆλŠ” ν•­λͺ©μ€ 쿼리에 μ‚¬μš©ν•  수 μžˆλŠ” 데이터λ₯Ό μ„€λͺ…ν•˜λŠ” μ„œλ²„μ— λ…ΈμΆœλœ GraphQL μŠ€ν‚€λ§ˆ 에 따라 λ‹€λ¦…λ‹ˆλ‹€ .

데이터λ₯Ό κ°€μ Έμ˜€κΈ° μœ„ν•΄μ„œ 쿼리가 μ‚¬μš©ν•˜λŠ” 선택적 λ³€μˆ˜(variables) μ»¬λ ‰μ…˜κ³Ό ν•¨κ»˜ λ„€νŠΈμ›Œν¬λ₯Ό 톡해 μš”μ²­μœΌλ‘œ λ³΄λ‚Όμˆ˜μžˆμŠ΅λ‹ˆλ‹€.

query UserQuery($id: ID!) {
  user(id: $id) {
    id
    name
    ...UserFragment
  }
  viewer {
    actor {
      name
    }
  }
}

fragment UserFragment on User {
  username
}

이 μΏΌλ¦¬λŠ” μ•„λž˜μ™€ 같은 데이터λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

{
  "data": {
    "user": {
      "id": "4",
      "name": "Mark Zuckerberg",
      "username": "zuck"
    },
    "viewer": {
      "actor": {
        "name": "Your Name"
      }
    }
  }
}

Rendering Queries

Relayμ—μ„œ 쿼리λ₯Ό λ Œλ”λ§ ν•˜κΈ° μœ„ν•΄μ„œ usePreloadedQuery λΌλŠ” hook 을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. usePreloadedQuery λŠ” 쿼리의 μ •μ˜μ™€ μ°Έμ‘°λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ μ‚¬μš©ν•˜μ—¬ ν•΄λ‹Ή 데이터λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

import type {HomeTabQuery} from 'HomeTabQuery.graphql';

const React = require('React');
const {graphql, usePreloadedQuery} = require('react-relay');

type Props = {
  queryRef: PreloadedQuery<HomeTabQuery>,
};

function HomeTab(props: Props) {
  const data = usePreloadedQuery<HomeTabQuery>(
    graphql`
      query HomeTabQuery($id: ID!) {
        user(id: $id) {
          name
        }
      }
    `,
    props.queryRef,
  );

  return (
    <h1>{data.user?.name}</h1>
  );
}

usePreloadedQuery λŠ” graphql쿼리와 μ°Έμ‘°λ₯Ό 가지고 ν•΄λ‹Ή 쿼리에 λŒ€ν•΄ κ°€μ Έμ˜¨ 데이터λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

  • HomeTab μ΄λΌλŠ” μ»΄ν¬λ„ŒνŠΈμ˜ κ²½μš°μ—λŠ” Props 둜 λ‚΄λ €λ°›λŠ” queryRefλ₯Ό μ„€λͺ…ν•˜κ³  μ°Έμ‘°ν•˜μ—¬ 쿼리에 ν•΄λ‹Ήλ˜λŠ” 데이터λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

  • PreloadedQueryλŠ” relay Complier κ°€ μƒμ„±ν•΄μ£ΌλŠ” type parameter λ₯Ό νƒ€μž…μœΌλ‘œ 가지고 μžˆμŠ΅λ‹ˆλ‹€. μœ„μ˜ κ²½μš°μ—λŠ” HomeTabQuery 의 νƒ€μž…μ΄ 여기에 ν•΄λ‹Ήλ©λ‹ˆλ‹€.

  • ν”„λž˜κ·Έλ¨ΌνŠΈ 와 μœ μ‚¬ν•˜κ²Œ ꡬ성 μš”μ†ŒλŠ” 쿼리 데이터에 λŒ€ν•œ μ—…λ°μ΄νŠΈλ₯Ό μžλ™μœΌλ‘œ κ΅¬λ…ν•©λ‹ˆλ‹€ . 이 쿼리에 λŒ€ν•œ 데이터가 μ•±μ˜ μ–΄λ””μ—μ„œλ‚˜ μ—…λ°μ΄νŠΈλ˜λ©΄ ꡬ성 μš”μ†ŒλŠ” μ΅œμ‹  μ—…λ°μ΄νŠΈλœ λ°μ΄ν„°λ‘œ μžλ™μœΌλ‘œ λ‹€μ‹œ λ Œλ”λ§λ©λ‹ˆλ‹€.

  • usePreloadedQuery λ˜ν•œ type parameter λ₯Ό HomeTabQuery 둜 가지고 μžˆμŠ΅λ‹ˆλ‹€.

    • RelayλŠ” λ‹€μŒκ³Ό 같은 이름 ν˜•μ‹μœΌλ‘œ μƒμ„±λœ νŒŒμΌμ—μ„œ κ°€μ Έμ˜¬ 수 μžˆλŠ” μ„ μ–Έλœ 쿼리에 λŒ€ν•΄ type을 μžλ™μœΌλ‘œ μƒμ„±ν•œλ‹€λŠ” 것을 κΈ°μ–΅ν•˜μ„Έμš”.<query_name>.graphql.js

  • 쿼리λ₯Ό λ Œλ”λ§ν•˜κΈ° 이전에 Relay Environment Provider 둜 root λ₯Ό 감싸 Relay ν™˜κ²½μ΄ μ œκ³΅λ˜λŠ”μ§€ ν™•μΈν•΄μ•Όν•©λ‹ˆλ‹€.

Fetching Queries for Render

쿼리λ₯Ό λ Œλ”λ§ ν•˜λŠ” 것 외에도 쿼리데이터λ₯Ό μ„œλ²„μ—μ„œ 가져와야 ν•©λ‹ˆλ‹€. 일반적으둜 μš°λ¦¬λŠ” μ•±μ˜ 루트 μ–΄λ”˜κ°€μ—μ„œ ν•˜λ‚˜ λ˜λŠ” λͺ‡κ°œμ˜ 쿼리둜 화면을 λ Œλ”λ§ν•˜λŠ” 데 ν•„μš”ν•œ λͺ¨λ“  데이터듀을 좕적할 μˆ˜μžˆλ„λ‘ λ§Œλ“€κΈΈ μ›ν•©λ‹ˆλ‹€. μ΄μƒμ μœΌλ‘œλŠ” μ•± λ Œλ”λ§μ„ μ‹œμž‘ν•˜κΈ° 전에 κ°€λŠ₯ν•œ ν•œ 빨리 κ°€μ Έμ˜€λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

λ‚˜μ€‘μ— 쿼리λ₯Ό μ„œλ²„μ—μ„œ κ°€μ Έμ˜€κΈ° μœ„ν•΄μ„œuseQueryLoader Hook 을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ .

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} /> :
      // ...
  );
}
  • μš°λ¦¬λŠ” useQueryLoader λ₯Ό AppTabs μ»΄ν¬λ„ŒνŠΈ μ•ˆμ—μ„œ ν˜ΈμΆœν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

    • 이 경우 HomeTabQuery쿼리(μ΄μ „μ˜ μ˜ˆμ—μ„œ μ„ μ–Έν•œ 쿼리)κ°€ ν•„μš”ν•˜λ©° HomeTabQuery.graphql μ—μ„œ μžλ™ μƒμ„±λœ νŒŒμΌμ„ 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

    • μƒνƒœμ— μ €μž₯되고 useQueryLoader 에 μ˜ν•΄ λ°˜ν™˜λ˜λŠ” PreloadedQuery의 초기 κ°’μœΌλ‘œ homeTabQueryRefλ₯Ό μ‚¬μš© μ€‘μž…λ‹ˆλ‹€.

  • useQueryLoader ν˜ΈμΆœμ„ 톡해 μš°λ¦¬λŠ” 두가지λ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

    • homeTabQueryRef: κ°€μ Έμ˜€κ±°λ‚˜ κ°€μ Έμ˜¨ μΏΌλ¦¬μž…λ‹ˆλ‹€. 이 값은 useQueryLoader κ°€ 호좜 λ˜μ§€ μ•Šμ•˜μ„ 경우 null 이 λ©λ‹ˆλ‹€. \

    • loadHomeTabQuery : 아직 μΊμ‹œλ˜μ§€ μ•Šμ€ κ²½μš°μ—λŠ” μ„œλ²„μ—μ„œ 이 쿼리에 λŒ€ν•œ 데이터λ₯Ό

      κ°€μ Έμ˜€κ³ , 쿼리가 μ˜ˆμƒ ν•˜λŠ” λ³€μˆ˜κ°€ μžˆλŠ” 객체λ₯Ό μ œκ³΅ν•˜λŠ” ν•¨μˆ˜ μž…λ‹ˆλ‹€. (μ—¬κΈ°μ„œλŠ” {id : 4})

      • 이 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ PreloadedQuery 쿼리 λŒ€μ‹ μ— homeTabQueryRef 둜 쿼리λ₯Ό μ—…λ°μ΄νŠΈ ν•©λ‹ˆλ‹€.

      • λ˜ν•œ λ Œλ”λ§ 을 μœ λ°œν•˜λŠ” 이벀트 ν•Έλ“€λŸ¬μ—μ„œ 이 ν•¨μˆ˜λ₯Ό 호좜 ν•©λ‹ˆλ‹€ . 이λ₯Ό 톡해 μƒˆ 탭이 λ Œλ”λ§μ„ μ‹œμž‘ν•˜κΈ° 전에도 κ°€λŠ₯ν•œ ν•œ 빨리 화면에 λŒ€ν•œ 데이터 κ°€μ Έμ˜€κΈ°λ₯Ό μ‹œμž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

      • 이 ν•¨μˆ˜λŠ” λ Œλ”λ§ 쀑에 ν˜ΈμΆœν•  수 μ—†μŠ΅λ‹ˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μ»΄ν¬λ„ŒνŠΈμ˜ λ Œλ” ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œ 호좜 ν•΄μ•Ό ν•©λ‹ˆλ‹€ . 그렇지 μ•ŠμœΌλ©΄ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

        • HomeTab μ»΄ν¬λ„ŒνŠΈκ°€ μ•„λ‹ˆλΌ AppTabs μ»΄ν¬λ„ŒνŠΈμ—μ„œ ν˜ΈμΆœν•΄μ•Όν•©λ‹ˆλ‹€.

  • useQueryLoader λŠ” μ»΄ν¬λ„ŒνŠΈκ°€ μ–Έλ§ˆμš΄νŠΈ 될 λ•Œ μ €μž₯ 된 λͺ¨λ“  쿼리가 μžλ™μœΌλ‘œ μ‚­μ œλ©λ‹ˆλ‹€. 쿼리λ₯Ό μ‚­μ œν•˜λ©΄ Relayκ°€ 더 이상 ν•΄λ‹Ή 쿼리의 νŠΉμ • μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ 데이터λ₯Ό μΊμ‹œμ— λ³΄κ΄€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ˜ν•œ μ»΄ν¬λ„ŒνŠΈκ°€ μ–Έλ§ˆμš΄νŠΈ 될 λ•Œ, 쿼리에 λŒ€ν•œ μš”μ²­μ΄ 아직 진행 쀑인 κ²½μš°μ—λŠ” μ·¨μ†Œλ©λ‹ˆλ‹€.

  • μ—­μ‹œ λ§ˆμ§€λ§‰μœΌλ‘œ , 쿼리λ₯Ό λ Œλ”λ§ν•˜κΈ° 이전에 Relay Environment Provider 둜 root λ₯Ό 감싸 Relay ν™˜κ²½μ΄ μ œκ³΅λ˜λŠ”μ§€ ν™•μΈν•΄μ•Όν•©λ‹ˆλ‹€.

μ‘μš© ν”„λ‘œκ·Έλž¨μ˜ 초기 λ‘œλ“œμ— ν•„μš”ν•œ 데이터λ₯Ό κ°€μ Έμ˜€κΈ° μœ„ν•΄ λΆ€λͺ¨ ꡬ성 μš”μ†Œμ˜ μ»¨ν…μŠ€νŠΈ μ™ΈλΆ€μ—μ„œ 가져와야 ν•˜λŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€.

μ΄λŸ¬ν•œ 경우 useQueryLoaderλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  loadQueryλ₯Ό μ‚¬μš©ν•΄μ„œ APIλ₯Ό 직접 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

import type {HomeTabQuery as HomeTabQueryType} from 'HomeTabQuery.graphql';

const HomeTabQuery = require('HomeTabQuery.graphql')
const {loadQuery} = require('react-relay');


const environment = createEnvironment(...);

// At some point during app initialization
const initialQueryRef = loadQuery<HomeTabQueryType>(
  environment,
  HomeTabQuery,
  {id: '4'},
);

// ...

// E.g. passing the initialQueryRef to the root component
render(<AppTabs initialQueryRef={initialQueryRef} initialTab={...} />)
  • μ»΄ν¬λ„ŒνŠΈμ— μ΄ˆκΈ°κ°’μœΌλ‘œ 쿼리λ₯Ό 전달해주기 μœ„ν•œ 쿼리λ₯Ό μ–»κΈ° μœ„ν•΄ loadQuery ν•¨μˆ˜λ₯Ό 직접 ν˜ΈμΆœν•©λ‹ˆλ‹€

  • 이 경우 루트 AppTabs μ»΄ν¬λ„ŒνŠΈκ°€ 쿼리 참쑰의 수λͺ…을 κ΄€λ¦¬ν•˜κ³  μ μ ˆν•œ μ‹œκ°„μ— μ‚­μ œν•  κ²ƒμœΌλ‘œ μ˜ˆμƒν•©λ‹ˆλ‹€.

  • 이 μ˜ˆμ œμ—μ„œλŠ” "μ•± μ΄ˆκΈ°ν™”"에 λŒ€ν•œ μ„ΈλΆ€ 정보λ₯Ό λͺ¨ν˜Έν•˜κ²Œ λ‚¨κ²¨λ‘μ—ˆμŠ΅λ‹ˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜λ§ˆλ‹€ λ‹€λ₯Ό 것이기 λ•Œλ¬Έμž…λ‹ˆλ‹€. μ—¬κΈ°μ„œ μ£Όλͺ©ν•΄μ•Ό ν•  μ€‘μš”ν•œ 점은 루트 μ»΄ν¬λ„ŒνŠΈ λ Œλ”λ§μ„ μ‹œμž‘ν•˜κΈ° 전에 쿼리 μ°Έμ‘°λ₯Ό μ–»μ–΄μ•Ό ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 특히 loadQuery λŠ” λ Œλ”λ§ μ€‘μ—λŠ” ν˜ΈμΆœν•  수 μ—†μŠ΅λ‹ˆλ‹€. μ»΄ν¬λ„ŒνŠΈμ˜ λ Œλ” ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œ ν˜ΈμΆœν•΄μ•Ό ν•©λ‹ˆλ‹€. 그렇지 μ•ŠμœΌλ©΄ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

Render as you Fetch

μœ„μ˜ μ˜ˆλŠ” κ°€λŠ₯ν•œ ν•œ 빨리 κ°€μ Έμ˜€κΈ°λ₯Ό μ‹œμž‘ν•˜κ³ (fetch λ₯Ό μ‹œμž‘ν•˜κΈ° μœ„ν•΄ μ»΄ν¬λ„ŒνŠΈκ°€ λ Œλ”λ§λ  λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦¬λŠ” 것과 λ°˜λŒ€), μ‚¬μš©μžμ—κ²Œ μ½˜ν…μΈ λ₯Ό ν‘œμ‹œν•  수 μžˆλ„λ‘ 데이터 fetch κ³Ό λ Œλ”λ§μ„ λΆ„λ¦¬ν•˜λŠ” 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€.

λ˜ν•œ waterfalling round trips 을 λ°©μ§€ν•˜λŠ” 데 도움이 되며 fetchκ°€ λ°œμƒν•˜λŠ” μ‹œκΈ°μ— λŒ€ν•΄ 더 λ§Žμ€ μ œμ–΄μ™€ 예츑 κ°€λŠ₯성을 μ œκ³΅ν•˜λŠ” 반면, λ Œλ”λ§ 쀑에 κ°€μ Έμ˜€λ©΄ fetchκ°€ λ°œμƒν•˜κ±°λ‚˜ λ°œμƒν•΄μ•Ό ν•˜λŠ” μ‹œμ μ„ κ²°μ •ν•˜κΈ°κ°€ 더 μ–΄λ €μ›Œμ§‘λ‹ˆλ‹€.

이것은 React Suspense 의 "render-as-you-fetch"νŒ¨ν„΄κ³Ό 잘 λ§žμŠ΅λ‹ˆλ‹€ .

이것은 Relay둜 데이터λ₯Ό κ°€μ Έμ˜€λŠ” 데 μ„ ν˜Έλ˜λŠ” νŒ¨ν„΄μ΄λ©° λͺ‡λͺ‡μ˜ μƒν™©μ—μ„œ 적용이 λ˜λŠ”λ°

μΌλ°˜μ μœΌλ‘œλŠ” μ²˜μŒμ— UI 보여지지 μ•Šλ‹€κ°€ λ‚˜μ€‘μ— μƒν˜Έ μž‘μš©(예: 메뉴, νŒμ˜€λ²„, λŒ€ν™” μƒμž λ“±) 및 μΆ”κ°€ 데이터λ₯Ό 가져와야 ν•©λ‹ˆλ‹€.

Lazily Fetching Queries during Render

쿼리λ₯Ό κ°€μ Έμ˜€λŠ” 또 λ‹€λ₯Έ 방법은 ꡬ성 μš”μ†Œκ°€ λ Œλ”λ§λ  λ•Œ 쿼리λ₯Ό 느리게 κ°€μ Έμ˜€λŠ” κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 이전에 μ–ΈκΈ‰ν–ˆλ“―μ΄ μ„ ν˜Έλ˜λŠ” νŒ¨ν„΄μ€ λ Œλ”λ§ 전에 쿼리 κ°€μ Έμ˜€κΈ°λ₯Ό μ‹œμž‘ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 주의 없이 지연 κ°€μ Έμ˜€κΈ°λ₯Ό μ‚¬μš©ν•˜λ©΄ 쀑첩 λ˜λŠ” waterfalling round trips 트리거되고 μ„±λŠ₯이 μ €ν•˜λ  수 μžˆμŠ΅λ‹ˆλ‹€.

쿼리λ₯Ό 느리게 κ°€μ Έμ˜€λ €λ©΄ useLazyLoadQueryHook을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ .

import type {AppQuery} from 'AppQuery.graphql';

const React = require('React');
const {graphql, useLazyLoadQuery} = require('react-relay');

function App() {
  const data = useLazyLoadQuery<AppQuery>(
    graphql`
      query AppQuery($id: ID!) {
        user(id: $id) {
          name
        }
      }
    `,
    {id: '4'},
  );

  return (
    <h1>{data.user?.name}</h1>
  );
}
  • useLazyLoadQuery graphql 쿼리와 ν•΄λ‹Ή 쿼리에 λŒ€ν•œ 일뢀 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜κ³  ν•΄λ‹Ή 쿼리에 λŒ€ν•΄ κ°€μ Έμ˜¨ 데이터λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. λ³€μˆ˜λŠ” GraphQL 쿼리 λ‚΄μ—μ„œ μ°Έμ‘° λ˜λŠ” λ³€μˆ˜μ˜ 값을 ν¬ν•¨ν•˜λŠ” 객체 μž…λ‹ˆλ‹€.

  • ν”„λž˜κ·Έλ¨ΌνŠΈμ™€ μœ μ‚¬ν•˜κ²Œ ꡬ성 μš”μ†ŒλŠ” 쿼리 데이터에 λŒ€ν•œ μ—…λ°μ΄νŠΈλ₯Ό μžλ™μœΌλ‘œ κ΅¬λ…ν•©λ‹ˆλ‹€. 이 쿼리에 λŒ€ν•œ 데이터가 μ•±μ˜ μ–΄λŠ κ³³μ—μ„œλ‚˜ μ—…λ°μ΄νŠΈλ˜λ©΄ ꡬ성 μš”μ†ŒλŠ” μ΅œμ‹  μ—…λ°μ΄νŠΈλœ λ°μ΄ν„°λ‘œ μžλ™μœΌλ‘œ λ‹€μ‹œ λ Œλ”λ§λ©λ‹ˆλ‹€.

    • RelayλŠ” μ„ μ–Έλœ 쿼리에 λŒ€ν•΄ type을 μžλ™μœΌλ‘œ μƒμ„±ν•˜λ―€λ‘œ κ°€μ Έμ˜€κ³  μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ useLazyLoadQuery. μ΄λŸ¬ν•œ μœ ν˜•μ€ λ‹€μŒκ³Ό 같은 이름 ν˜•μ‹μœΌλ‘œ μƒμ„±λœ νŒŒμΌμ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ <query_name>.graphql.js.

  • 기본적으둜 μ»΄ν¬λ„ŒνŠΈ λ Œλ”λ§λ  λ•Œ RelayλŠ” 이 쿼리에 λŒ€ν•œ 데이터λ₯Ό κ°€μ Έμ˜€κ³  useLazyLoadQuery (아직 μΊμ‹œλ˜μ§€ μ•Šμ€ 경우) 이λ₯Ό 호좜 결과둜 λ°˜ν™˜ν•©λ‹ˆλ‹€ .

  • μ»΄ν¬λ„ŒνŠΈλ₯Ό λ‹€μ‹œ λ Œλ”λ§ ν•˜κ³  μ›λž˜ μ‚¬μš©λœ 것과 λ‹€λ₯Έ 쿼리 λ³€μˆ˜ λ₯Ό 전달 ν•˜λ©΄ 쿼리가 μƒˆ λ³€μˆ˜λ‘œ λ‹€μ‹œ 가져와지고 잠재적으둜 λ‹€λ₯Έ λ°μ΄ν„°λ‘œ λ‹€μ‹œ λ Œλ”λ§λ©λ‹ˆλ‹€.

Last updated