Codemods
根据 1.9.0
中的描述,我们在 RTK 2.0 主版本中移除了 createReducer
和 createSlice.extraReducers
的 "object" 参数。我们还添加了一种新的可选形式的 createSlice.reducers
,它使用回调而不是对象。
为了简化代码库的升级,我们发布了一套 codemods,它们会自动将已弃用的 "object" 语法转换为等效的 "builder" 语法。
codemods 包可在 NPM 上获取,名为 @reduxjs/rtk-codemods
。它目前包含以下 codemods:
createReducerBuilder
:将使用已移除的对象语法的createReducer
调用迁移到 builder 回调语法createSliceBuilder
:将createSlice
调用中对extraReducers
使用已移除的对象语法迁移到 builder 回调语法createSliceReducerBuilder
:将createSlice
调用中对reducers
使用仍然标准的对象语法迁移到新的可选 builder 回调语法,包括准备好的 reducers 的使用
要对您的代码库运行 codemods,请运行 npx @reduxjs/rtk-codemods <TRANSFORM NAME> path/of/files/ or/some**/*glob.js
。
示例:
npx @reduxjs/rtk-codemods createReducerBuilder ./src
npx @reduxjs/rtk-codemods createSliceBuilder ./packages/my-app/**/*.ts
我们还建议在提交更改之前重新运行 Prettier 对代码库进行格式化。
这些 codemods 应该 能够工作,但我们非常欢迎在更多实际的代码库上进行测试和反馈!
之前:
createReducer(initialState, {
[todoAdded1a]: (state, action) => {
// 一些操作
},
[todoAdded1b]: (state, action) => action.payload,
})
const slice1 = createSlice({
name: 'a',
initialState: {},
extraReducers: {
[todoAdded1a]: (state, action) => {
// 一些操作
},
[todoAdded1b]: (state, action) => action.payload,
},
})
之后 :
createReducer(initialState, (builder) => {
builder.addCase(todoAdded1a, (state, action) => {
// 一些操作
})
builder.addCase(todoAdded1b, (state, action) => action.payload)
})
const slice1 = createSlice({
name: 'a',
initialState: {},
extraReducers: (builder) => {
builder.addCase(todoAdded1a, (state, action) => {
// 一些操作
})
builder.addCase(todoAdded1b, (state, action) => action.payload)
},
})