Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
pluginagentmarketplace avatar

React Native State

  • 36 installs
  • 9 repo stars
  • Updated January 5, 2026
  • pluginagentmarketplace/custom-plugin-react-native

Helps with frontend development tasks.

About

react-native-state is a Claude Code skill for frontend development. It helps solo builders move faster with AI-assisted development.

  • react-native-state
  • Frontend Development
  • AI-coding skill

React Native State by the numbers

  • 36 all-time installs (skills.sh)
  • Ranked #1,414 of 2,245 Frontend Development skills by installs in the Skillselion catalog
  • Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/pluginagentmarketplace/custom-plugin-react-native --skill react-native-state

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs36
repo stars9
Last updatedJanuary 5, 2026
Repositorypluginagentmarketplace/custom-plugin-react-native

What it does

Helps with frontend development tasks.

Files

SKILL.mdMarkdownGitHub ↗

React Native State Management Skill

Learn production-ready state management including Redux Toolkit, Zustand, TanStack Query, and persistence with AsyncStorage/MMKV.

Prerequisites

  • React Native basics
  • TypeScript fundamentals
  • Understanding of React hooks

Learning Objectives

After completing this skill, you will be able to:

  • [ ] Set up Redux Toolkit with TypeScript
  • [ ] Create Zustand stores with persistence
  • [ ] Manage server state with TanStack Query
  • [ ] Persist data with AsyncStorage/MMKV
  • [ ] Choose the right solution for each use case

---

Topics Covered

1. Redux Toolkit Setup

// 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 Slice

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 Store

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. When to Use What

SolutionUse Case
useState/useReducerComponent-local state
ZustandSimple global state, preferences
Redux ToolkitComplex app state, large teams
TanStack QueryServer state, caching, sync
ContextTheme, auth status (low-frequency)

---

Quick Start Example

// 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
}

---

Common Errors & Solutions

ErrorCauseSolution
"Non-serializable value"Functions in Redux stateUse middleware ignore
State not persistingWrong storage configCheck persist config
Stale dataMissing invalidationAdd proper query keys

---

Validation Checklist

  • [ ] State updates correctly
  • [ ] Persistence works across restarts
  • [ ] Server state syncs properly
  • [ ] TypeScript types are correct

---

Usage

Skill("react-native-state")

Bonded Agent: 03-react-native-state

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.