# Apollo Client

# なぜ Apollo Client か

# 宣言的なデータ取得

  • データ取得にまつわる多くの面倒な処理がuseQueryにカプセル化される
    • データ取得の開始と終了
    • データ取得中かどうかの状態管理
    • エラーの管理
    • UI の更新
    • 正規化
    • キャッシング
    • 楽天的更新
    • データの再取得
    • ページネーション
  • これにより、下手をすると数千行のコードを削減できる
function Feed() {
  const { loading, error, data } = useQuery(GET_DOGS);
  if (error) return <Error />;
  if (loading || !data) return <Fetching />;

  return <DogList dogs={data.dogs} />;
}

# ゼロコンフィグ・キャッシング

正規化されたデータキャッシュをゼロコンフィグで利用できる

# Local data と Remote data の統合

  • remote だけでなく local のデータ管理機能も持っている
  • キャッシングや正規化も使える
  • ローカルデータも Apollo で管理することで、Apollo DevTools を使って全てのデータを一元的に管理することができる
  • client side only な属性を作ることもできる
const GET_DOG = gql`
  query GetDogByBreed($breed: String!) {
    dog(breed: $breed) {
      images {
        url
        id
        isLiked @client // <==クライアントだけに存在する属性
      }
    }
  }
`;