跳到主要内容

 

Codemods

根据 1.9.0 中的描述,我们在 RTK 2.0 主版本中移除了 createReducercreateSlice.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)
},
})