跳至主要內容

其他輸出

Redux Toolkit 輸出一些內部工具程式,並重新輸出其他相依項的其他函式。

nanoid

內嵌 nanoid/nonsecure 的副本。產生非加密安全隨機 ID 字串。createAsyncThunk 預設使用此函式來產生要求 ID。也可能對其他情況有用。

import { nanoid } from '@reduxjs/toolkit'

console.log(nanoid())
// 'dgPXxUz_6fWIQBD8XmiSy'

miniSerializeError

createAsyncThunk 使用的預設錯誤序列化函式,根據 https://github.com/sindresorhus/serialize-error。如果其引數是物件(例如 Error 實例),它會傳回一個純 JS SerializedError 物件,複製任何列出的欄位。否則,它會傳回一個字串化的值:{ message: String(value) }

export interface SerializedError {
name?: string
message?: string
stack?: string
code?: string
}

export function miniSerializeError(value: any): SerializedError {}

copyWithStructuralSharing

一個工具程式,將兩個類似的物件遞迴合併在一起,如果值看起來相同,則保留現有的參照。這是內部用來確保重新擷取的資料持續使用相同的參照,除非新資料實際上已變更,以避免不必要的重新渲染。否則,每次重新擷取可能會導致整個資料集被替換,且所有使用中的元件總是重新渲染。

如果任一輸入不是純粹的 JS 物件或陣列,則會傳回新值。

export function copyWithStructuralSharing<T>(oldObj: any, newObj: T): T
export function copyWithStructuralSharing(oldObj: any, newObj: any): any {}

從其他函式庫匯出

createNextState

immer 函式庫 中的預設不可變更新函式,在此重新匯出為 createNextState(也常稱為 produce

current

immer 函式庫 中的 current 函式,它會擷取草稿的目前狀態快照並將其完成(但不會凍結)。Current 是在除錯期間列印目前狀態的絕佳工具程式,且 current 的輸出也可以安全地外洩至產生器之外。

import { createReducer, createAction, current } from '@reduxjs/toolkit'

interface Todo {
//...
}
const addTodo = createAction<Todo>('addTodo')

const initialState = [] satisfies Todo[] as Todo[]

const todosReducer = createReducer(initialState, (builder) => {
builder.addCase(addTodo, (state, action) => {
state.push(action.payload)
console.log(current(state))
})
})

original

immer 函式庫 中的 original 函式,它會傳回原始物件。這在還原器中的參照相等性檢查中特別有用。

isDraft

immer 函式庫 中的 isDraft 函式,它會檢查給定的值是否為 Proxy 包裝的「草稿」狀態。

freeze

immer 函式庫 中的 freeze 函式,它會 凍結 可草稿化的物件。

combineReducers

Redux 的 combineReducers,重新匯出以方便使用。雖然 configureStore 會在內部呼叫這個函式,但你可能希望自己呼叫它來組合多層級的切片 reducer。

compose

Redux 的 compose。它從右到左組合函式。這是一個函式程式設計工具程式。你可能想要用它來連續套用多個自訂 store 增強器/函式。

bindActionCreators

Redux 的 bindActionCreators。它用 dispatch() 包裝動作建立器,以便在呼叫時立即進行派送。

createStore

Redux 的 createStore。你不應該需要直接使用它。

applyMiddleware

Redux 的 applyMiddleware。你不應該需要直接使用它。