プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • React
  • 【React】GraphQL &Apollo Clientでの状態管理
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【React】GraphQL &Apollo Clientでの状態管理

10.08

  • miyabisan2
  • コメントを書く

この記事は1分で読めます

REST API & Reduxの場合

グローバルストアにReduxを使ってコンポーネント間で状態管理します。

もしくは、最近はRecoilなども使われることも多いです。

GraphQL & Apollo Clientの場合

GraphQLとApollo Clientの場合はグローバルな状態管理にcache or makeVar(もしくは、cacheとmakeVarを組み合わせて使うこともできる。)を使います。

あるコンポーネントで一度問い合わせを行うと、他のコンポーネントでは@をつけるだけでcacheから情報を取得できるようになります。

Reduxと似たようなことをApollo Client標準のcache機構を使えば実現できるというのが大きな特徴です。

cache

cacheの更新のメカニズムは結構複雑で自分の知らないところでcacheが更新してしまったりする場合があります。(確実に自分の管理下でstateを管理したい場合はmakeVarを使うと良いでしょう。)

makeVar

あるコンポーネントからデータを保存する場合に使います。

1
2
3
4
5
import { makeVar } from '@apollo/client'
interface User {
  name: string
}
export const userVar = makeVar<User[]>([])

値の更新

1
2
3
const handleSubmit = (e: FormEvent<HTMLFormElement>) => {
  userVar([...userVar(), { name: "太郎" }])
}

スプレットで現在の値を展開した上で追加する値を付加するような形にすればmakeVarの値を更新できます。

useReactiveVar(呼び出し側)

他のコンポーネントでmakeVarからデータを取得する場合に使います。

1
2
3
4
import { userVar } from '../cache'
import { useReactiveVar } from '@apollo/client'
 
const users = useReactiveVar(userVar); // ユーザーデータ取得こ

useReactiveVarは、キャッシュから切り離されており、任意のデータ型や構造のデータを保持することができます。GraphQLをアプリケーションのどこからでも参照できるグローバルな管理を実現します。

スポンサーリンク
  • 2022 10.08
  • miyabisan2
  • コメントを書く
  • GraphQL, React
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2021 02.20

    【React】「子コンポーネント」から「親コンポーネント」への値渡し

  2. 2021 02.08

    【Redux】「Store」について

  3. 2021 02.08

    【Redux】Reduxの基本と動作の仕組み、3原則(単一情報源、イミュータブル、純粋関数)

  4. 2021 07.22

    【React】「useMemo/useCallback」について

  5. 2021 05.30

    【React】「React Query」について

  6. 2022 10.03

    【GraphQL】構成(「クエリ言語」、「スキーマ言語」)

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【GraphQL】「graphql-codegen」に…

【Next.js】「Hasura」と「Apollo C…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー