前端
PythonJava运维数据库
状态管理
状态管理
  • 🖥️Redux Tookit
    • Introduction
      • 介绍
    • Tutorials
      • 🖥️快速开始
      • 🏐在TypeScript环境使用
    • Using Redux toolkit
      • 使用Immer编写Reducers
      • 性能与数据范式化
      • 异步逻辑与数据请求
      • Usage With TypeScript
    • API Refrence
      • Store Setup
        • configureStore
        • getDefaultMiddleware
        • Immutability Middleware
        • Serializability Middleware
        • Action Creator Middleware
        • createListenerMiddleware
        • createDynamicMiddleware
        • getDefaultEnhancers
        • autoBatchEnhancer
      • Reducer and Actions
        • createReducer
        • createAction
        • createSlice
        • createAsyncThunk
        • createEntityAdapter
        • combineSlices
      • Other
        • createSelector
        • Matching Utilities
    • RTX Query
      • RTK Query Overview
      • Comparson with Other Tools
      • Examples
      • Usage With TypeScript
      • Using RTK Query
        • Queries
        • Mutations
      • API Refrence
        • createApi
        • fetchBaseQuery
        • ApiProvider
        • setupListeners
        • Generated API Slices
          • Generated API Slices
          • Redux Integration
          • Endpoints
          • Code Splitting
          • Utilities
          • React Hooks
  • 🚚Redux-Saga
    • 入门
    • 基础概念
    • API
    • 技巧
  • 🚑React Redux
    • 安装
    • 教程
    • 使用 React Redux
    • API 参考
  • 🚕生态
    • Redux Persist
    • zustand
      • 使用 useShallow 防止重新渲染
由 GitBook 提供支持
在本页
  • 调试和检查起草状态
  • 更新潜嵌套数据

这有帮助吗?

  1. Redux Tookit
  2. Using Redux toolkit

使用Immer编写Reducers

上一页Using Redux toolkit下一页性能与数据范式化

最后更新于9个月前

这有帮助吗?

调试和检查起草状态

通常希望从 reducer 记录正在进行的状态,以查看更新时的状态,如console.log(state)。不幸的是,浏览器以难以阅读或理解的格式显示记录的代理实例:

为了解决这个问题,,RTK 可以重新导出 current。如果需要记录或检查正在进行的工作状态,可以在 reducers 中使用此功能:

import { current } from "@reduxjs/toolkit";

const todosSlice = createSlice({
    name: "todos",
    initialState: todosAdapter.getInitialState(),
    reducers: {
        todoToggled(state, action) {
            // ❌ ERROR: 记录代理包裹的数据
            console.log(state);
            // ✅ CORRECT: 记录当前数据的纯JS副本
            console.log(current(state));
        },
    },
});

Immer 还提供 ,该函数在不应用任何更新的情况下检索原始数据,并检查给定值是否是代理包裹的草稿。从 RTK 1.5.1 开始,这两个版本也从 RTK 重新导出。

更新潜嵌套数据

🖥️
Immer 包含了一个 current 函数,可以提取包裹数据的副本
original 和 isDraft 函数