其他导出
Redux Toolkit 导出了一些内部实用程序,并重新导出其他依赖项中的其他函数。
nanoid
内联的 nanoid/nonsecure
的副本。生成一个非加密安全的随机 ID 字符串。createAsyncThunk
默认情况下使用此方法作为请求 ID。也可能在其他情况下有用。
- TypeScript
- JavaScript
import { nanoid } from '@reduxjs/toolkit'
console.log(nanoid())
// 'dgPXxUz_6fWIQBD8XmiSy'
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
的输出也可以安全地泄露到生产者之外。
- TypeScript
- JavaScript
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))
})
})
import { createReducer, createAction, current } from '@reduxjs/toolkit'
const addTodo = createAction('addTodo')
const initialState = []
const todosReducer = createReducer(initialState, (builder) => {
builder.addCase(addTodo, (state, action) => {
state.push(action.payload)
console.log(current(state))
})
})
original
来自 immer
库 的 original
函数,它返回原始对象。这对于在 reducer 中进行引用相等性检查特别有用。
isDraft
来自 immer
库 的 isDraft
函数,它检查给定值是否为代理包装的“草稿”状态。
freeze
freeze
函数 来自 immer
库,它 冻结 可草稿对象。
combineReducers
Redux 的 combineReducers
,为了方便重新导出。虽然 configureStore
在内部调用它,但您可能希望自己调用它来组合多个级别的切片 reducer。
compose
Redux 的 compose
。它从右到左组合函数。这是一个函数式编程工具。您可能希望使用它依次应用多个存储自定义增强器/函数。
bindActionCreators
Redux 的 bindActionCreators
。它将动作创建者包装在 dispatch()
中,以便它们在调用时立即调度。
createStore
Redux 的 createStore
。您不应该直接使用它。
applyMiddleware
Redux 的 applyMiddleware
。您不应该直接使用它。