mcpField
R
react-native-state

react-native-state

github.com/pluginagentmarketplace開発1037 回インストール42 週間前に更新
リポジトリ

react-native-state について

react-native-stateは、React Native開発者向けにTypeScriptでアプリ状態とサーバー状態を扱う方法を学べるスキルです。Redux Toolkit、Zustand、TanStack Query、永続化ストレージの例と選定指針を含みます。

主な機能

  1. 01TypeScriptでRedux Toolkitを設定
  2. 02永続化対応のZustandストアを作成
  3. 03TanStack Queryでサーバー状態を管理
  4. 04AsyncStorageまたはMMKVでデータを永続化
  5. 05用途に応じた状態管理ツールの選択
  6. 06一般的な状態管理エラーの解決

活用シーン

  1. 01React Nativeアプリに型付き状態管理を導入
  2. 02アプリ再起動後も設定を保持
  3. 03サーバーデータをキャッシュして同期

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/pluginagentmarketplace/custom-plugin-react-native --skill react-native-state

インストール後、Claude Code で/react-native-stateを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
config.yaml
schema.json
references/
GUIDE.md
PATTERNS.md
scripts/
validate.py

詳細

React Native 状態管理スキル

Redux Toolkit、Zustand、TanStack Query、および AsyncStorage/MMKV による永続化を含む、本番環境で使える状態管理を学びます。

前提条件

  • React Native の基礎知識
  • TypeScript の基礎知識
  • React フックの理解

学習目標

このスキルを完了すると、次のことができるようになります。

  • Redux Toolkit を TypeScript でセットアップする
  • 永続化機能を備えた Zustand ストアを作成する
  • TanStack Query でサーバー状態を管理する
  • AsyncStorage/MMKV でデータを永続化する
  • ユースケースごとに適切なソリューションを選択する

対象トピック

1. Redux Toolkit のセットアップ
// store/index.ts
import { configureStore } from '@reduxjs/toolkit';
import { authSlice } from './slices/authSlice';

export const store = configureStore({
  reducer: {
    auth: authSlice.reducer,
  },
});

export type RootState = ReturnType<typeof store.getState>;
export type AppDispatch = typeof store.dispatch;
2. RTK スライス
import { createSlice, PayloadAction } from '@reduxjs/toolkit';

interface AuthState {
  user: User | null;
  token: string | null;
}

export const authSlice = createSlice({
  name: 'auth',
  initialState: { user: null, token: null } as AuthState,
  reducers: {
    setUser: (state, action: PayloadAction<User>) => {
      state.user = action.payload;
    },
    logout: (state) => {
      state.user = null;
      state.token = null;
    },
  },
});
3. Zustand ストア
import { create } from 'zustand';
import { persist, createJSONStorage } from 'zustand/middleware';
import AsyncStorage from '@react-native-async-storage/async-storage';

interface AppStore {
  theme: 'light' | 'dark';
  setTheme: (theme: 'light' | 'dark') => void;
}

export const useAppStore = create<AppStore>()(
  persist(
    (set) => ({
      theme: 'light',
      setTheme: (theme) => set({ theme }),
    }),
    {
      name: 'app-storage',
      storage: createJSONStorage(() => AsyncStorage),
    }
  )
);
4. TanStack Query
import { useQuery, useMutation } from '@tanstack/react-query';

export function useProducts() {
  return useQuery({
    queryKey: ['products'],
    queryFn: () => api.getProducts(),
    staleTime: 1000 * 60 * 5, // 5 minutes
  });
}

export function useCreateProduct() {
  const queryClient = useQueryClient();

  return useMutation({
    mutationFn: api.createProduct,
    onSuccess: () => {
      queryClient.invalidateQueries({ queryKey: ['products'] });
    },
  });
}
5. 使い分け
ソリューションユースケース
useState/useReducerコンポーネント内の状態
Zustandシンプルなグローバル状態、設定
Redux Toolkit複雑なアプリの状態、大規模なチーム
TanStack Queryサーバー状態、キャッシュ、同期
Contextテーマ、認証状態(更新頻度が低いもの)

クイックスタートの例

// Zustand + TanStack Query combo
import { create } from 'zustand';
import { useQuery } from '@tanstack/react-query';

// UI state with Zustand
const useUIStore = create((set) => ({
  sidebarOpen: false,
  toggleSidebar: () => set((s) => ({ sidebarOpen: !s.sidebarOpen })),
}));

// Server state with TanStack Query
function ProductList() {
  const { data, isLoading } = useQuery({
    queryKey: ['products'],
    queryFn: fetchProducts,
  });

  const sidebarOpen = useUIStore((s) => s.sidebarOpen);

  // Render with both states
}

よくあるエラーと解決策

エラー原因解決策
"Non-serializable value"Redux の状態に関数があるミドルウェアの ignore を使用する
状態が永続化されないストレージ設定の誤りpersist の設定を確認する
古いデータ無効化が不足している適切なクエリーキーを追加する

検証チェックリスト

  • 状態が正しく更新される
  • 再起動後もデータが保持される
  • サーバー状態が適切に同期される
  • TypeScript の型が正しい

使用方法

Skill("react-native-state")

担当エージェント: 03-react-native-state

コメント