react-native-state

Master state management - Redux Toolkit, Zustand, TanStack Query, and data persistence

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "react-native-state" with this command: npx skills add pluginagentmarketplace/custom-plugin-react-native/pluginagentmarketplace-custom-plugin-react-native-react-native-state

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

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Automation

react-native-animations

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

react-native-testing

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

react-native-navigation

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

react-native-basics

No summary provided by upstream source.

Repository SourceNeeds Review
react-native-state | V50.AI