Redux Toolkit

作者 mindrally97184105b5da無授權條款269 個星標收錄於 2026年10月8日更新於 2026年10月8日儲存庫5 週前更新

Comprehensive Redux Toolkit best practices for React and Next.js applications with TypeScript.

AI 產生的概覽

為使用 TypeScript 的 React 與 Next.js 應用程式提供 Redux Toolkit 狀態管理的最佳實務指引。

功能
提供在 TypeScript 撰寫的 React 與 Next.js 應用程式中組織 Redux Toolkit 狀態管理的最佳實務說明。內容涵蓋 slice 結構、命名慣例、TypeScript 整合、使用 RTK Query 與 createAsyncThunk 的非同步操作、效能最佳化、選擇器、錯誤處理以及測試。產出為書面指引與程式碼範例,而非可執行的成品。
適用情境
適用於在使用 Redux Toolkit 的 React 或 Next.js 程式庫中實作或審查全域狀態管理時。也適用於在 RTK Query 與 createAsyncThunk 之間做選擇,或統一 slice、選擇器與命名慣例時。
執行需求
不包含指令碼或工具,僅為說明性內容。套用此指引需具備使用 TypeScript 與 Redux Toolkit 的 React 或 Next.js 專案,並提及 Jest、React Testing Library 與 Zod 等相關程式庫。

Redux Toolkit

You are an expert in Redux Toolkit for state management in React and Next.js applications.

Development Philosophy

  • Write clean, maintainable, and scalable code
  • Adhere to SOLID principles
  • Favor functional and declarative programming patterns
  • Emphasize type safety and component-driven approaches

Redux State Management

Core Principles

  • Implement Redux Toolkit for global state management
  • Use createSlice to define state, reducers, and actions together
  • Normalize state structure to prevent deeply nested data
  • Employ selectors to encapsulate state access
  • Separate concerns by feature; avoid monolithic slices

Slice Structure

typescript
import { createSlice, PayloadAction } from '@reduxjs/toolkit'
interface CounterState {  value: number  isLoading: boolean}
const initialState: CounterState = {  value: 0,  isLoading: false,}
const counterSlice = createSlice({  name: 'counter',  initialState,  reducers: {    increment: (state) => {      state.value += 1    },    setLoading: (state, action: PayloadAction<boolean>) => {      state.isLoading = action.payload    },  },})
export const { increment, setLoading } = counterSlice.actionsexport default counterSlice.reducer

Naming Conventions

  • PascalCase: Components, type definitions, interfaces
  • kebab-case: Directory and file names
  • camelCase: Variables, functions, methods, hooks, properties
  • UPPERCASE: Environment variables, constants

Prefixes

  • Event handlers: handle (e.g., handleClick)
  • Boolean variables: verbs (e.g., isLoading, hasError)
  • Custom hooks: use (e.g., useAuth)

TypeScript Integration

  • Enable strict mode
  • Define clear interfaces for props and Redux state structure
  • Apply generics where type flexibility is needed
  • Prefer interfaces over types for object structures
  • Use typed hooks (useAppDispatch, useAppSelector)

Async Operations

RTK Query

  • Use RTK Query for data fetching and caching
  • Define API slices with endpoints
  • Leverage automatic cache invalidation
  • Implement optimistic updates when appropriate

createAsyncThunk

typescript
export const fetchUser = createAsyncThunk(  'user/fetch',  async (userId: string, { rejectWithValue }) => {    try {      const response = await api.getUser(userId)      return response.data    } catch (error) {      return rejectWithValue(error.message)    }  })

Performance Optimization

  • Use React.memo() strategically
  • Implement useCallback for memoized functions
  • Apply useMemo for expensive computations
  • Avoid inline function definitions in JSX
  • Use dynamic imports for code splitting
  • Employ proper keys in lists (avoid index-based keys)

Selectors

  • Create memoized selectors with createSelector
  • Encapsulate state shape in selectors
  • Compose selectors for derived data
  • Avoid computing in components

Error Handling

  • Implement error boundaries with external logging
  • Use Zod for validation
  • Handle async errors in thunks
  • Provide user-friendly error messages

Testing

  • Apply Jest and React Testing Library
  • Follow Arrange-Act-Assert patterns
  • Mock external dependencies
  • Test reducers, selectors, and thunks independently

來源與署名

來源:mindrally/skills位於redux-toolkit提交9718410

授權條款: 無授權條款

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架