Managing Data Outside React

Query ์œ ์ง€ํ•˜๊ธฐ

Relay ๊ฐ€ ์ฐธ์กฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํŒ… ํ•˜์ง€ ์•Š๋„๋ก query ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด environment.retain ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.

const {
  createOperationDescriptor,
  getRequest,
  graphql,
} = require('relay-runtime')

// ์ผ๋ฐ˜์ ์ธ GraphQL query ์˜ค๋ธŒ์ ํŠธ
const query = graphql`...`;

// query ๋ฅผ Relay ๊ฐ€ ๋‹ค๋ฃจ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐ€๊ณตํ•˜์—ฌ ์ƒ์„ฑํ•ด์š”
const queryRequest = getRequest(query);
const queryDescriptor = createOperationDescriptor(
  queryRequest,
  variables
);

// Retain query; 
// Relay ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ์ด query ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜๊ฑฐํ•˜์ง€ ์•Š๋„๋ก ํ•ด์š”.
const disposable = environment.retain(queryDescriptor);

// dispose ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด
// ์ด query ๋Š” Relay ์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๋Œ€์ƒ์ด ๋˜์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜๊ฑฐํ•  ์ˆ˜ ์žˆ์–ด์š”.
// ๋‹จ, ๋‹ค๋ฅธ ์œ„์น˜์—์„œ ํ•ด๋‹น query ๋ฅผ retain ํ•˜์ง€ ์•Š์•„์•ผ ํ•ด์š”.
disposable.dispose();

์•Œ์•„๋‘์„ธ์š”

Relay ๋Š” data ๋ฅผ render ํ•˜๋Š” mount ์ƒํƒœ์˜ query ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ query data retain ์„ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•ด์š”. ๊ทธ๋ž˜์„œ ์ผ๋ฐ˜์ ์ธ ์ƒํ™ฉ์—์„œ๋Š” production code ์—์„œ retain ์„ ์ง์ ‘ ํ˜ธ์ถœํ•  ํ•„์š”๊ฐ€ ์—†์–ด์š”. ์ข€ ๋” ํŠน์ˆ˜ํ•˜๊ฑฐ๋‚˜ ๊ณ ๊ธ‰์ ์ธ ์‚ฌ์šฉ์„ ๊ณ ๋ คํ•œ๋‹ค๋ฉด, query data retention ์€ Router ์™€ ๊ฐ™์€ infra-level ์ฝ”๋“œ์—์„œ ๋‹ค๋ค„์•ผ ํ•ด์š”.

Last updated