跳到主要内容

 

其他导出

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 函数,它检查给定的值是否是 Proxy 包装的 "draft" 状态。

freeze

来自 immerfreeze 函数,它冻结可草稿化的对象。

combineReducers

Redux 的 combineReducers,为了方便起见重新导出。虽然 configureStore 在内部调用了这个,但你可能希望自己调用它来组合多级的 slice reducers。

compose

Redux 的 compose。它从右到左组合函数。 这是一个函数式编程实用工具。你可能想用它来连续应用几个 store 自定义增强器/函数。

bindActionCreators

Redux 的 bindActionCreators。它用 dispatch() 包装 action 创建者,以便它们在被调用时立即分派。

createStore

Redux 的 createStore。你不应该直接使用这个。

applyMiddleware

Redux 的 applyMiddleware。你不应该直接使用这个。