From 4c055cc46fdacb18808a2377a76e5f35107cd6d4 Mon Sep 17 00:00:00 2001 From: jgjgill Date: Fri, 30 Aug 2024 16:20:40 +0900 Subject: [PATCH] =?UTF-8?q?road:=20cache.modify=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- roads/2024/08/30.mdx | 51 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 roads/2024/08/30.mdx diff --git a/roads/2024/08/30.mdx b/roads/2024/08/30.mdx new file mode 100644 index 0000000..606328c --- /dev/null +++ b/roads/2024/08/30.mdx @@ -0,0 +1,51 @@ +--- +title: 'cache.modify 정리' +date: '2024-08-30' +slug: '2024-08-30' +type: 'road' +--- + +GraphQL에서는 `cache.modify`를 통해 캐싱된 필드의 값을 직접 수정할 수 있다. + +
+ +### `writeQuery` `writeFragment`와의 공통점 + +수정된 필드에 의존하는 모든 활성 쿼리가 새로 고침된다. + +(`broadcast: false` 옵션을 줬을 때는 예외이다.) + +
+ +### `writeQuery` `writeFragment`와의 차이점 + +`modify`는 [merge function](https://www.apollographql.com/docs/react/caching/cache-field-behavior/#the-merge-function)을 우회한다. + +그래서 필드가 항상 지정한 값으로 정확하게 덮어쓰게 된다. + +`modify`는 캐시에 존재하지 않은 필드는 사용할 수 없다. + +
+ +### `broadcast` `optimistic` 옵션 + +`cache.modify`에는 `Apollo Client`의 내부 동작을 제어하는 옵션으로 `broadcast`, `optimistic`가 존재한다. + +이 옵션들은 캐시의 변경 사항이 어떻게 다른 부분에 반영되는지를 결정한다. + +
+ +**broadcast** + +- 캐시가 수정되었을 때 `Apollo Client`가 해당 변경 사항과 관련된 쿼리의 새로고침 여부를 결정한다. +- 기본값은 `true`이다. + +**optimistic** + +- 캐시된 값도 수정하는 낙관적 업데이트로 수행 여부를 결정한다. +- 기본값은 `false`이다. + +## 참고 자료 + +- [Using cache.modify](https://www.apollographql.com/docs/react/caching/cache-interaction/#using-cachemodify) +- [modify](https://www.apollographql.com/docs/react/api/cache/InMemoryCache/#modify)