跳至主要内容

其他导出

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

来自 immercurrent 函数,它会获取草稿的当前状态的快照并将其最终确定(但不会冻结)。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

来自 immeroriginal 函数,它返回原始对象。这对于在 reducer 中进行引用相等性检查特别有用。

isDraft

来自 immerisDraft 函数,它检查给定值是否为代理包装的“草稿”状态。

freeze

freeze 函数 来自 immer,它 冻结 可草稿对象。

combineReducers

Redux 的 combineReducers,为了方便重新导出。虽然 configureStore 在内部调用它,但您可能希望自己调用它来组合多个级别的切片 reducer。

compose

Redux 的 compose。它从右到左组合函数。这是一个函数式编程工具。您可能希望使用它依次应用多个存储自定义增强器/函数。

bindActionCreators

Redux 的 bindActionCreators。它将动作创建者包装在 dispatch() 中,以便它们在调用时立即调度。

createStore

Redux 的 createStore。您不应该直接使用它。

applyMiddleware

Redux 的 applyMiddleware。您不应该直接使用它。