我在redux-toolkit的函数中prepare
包含的reducer中包含的回调函数遇到了一些问题。addEntity
createSlice
我正在尝试使用prepare
回调将唯一 ID 添加到我的操作有效负载中。
redux -toolkitcreateSlice
文档说:
如果需要通过 prepare 回调自定义创建 action creator 的有效负载值,reducers 参数对象的相应字段的值应该是对象而不是函数。该对象必须包含两个属性:reducer 和 prepare。reducer 字段的值应该是 case reducer 函数,而 prepare 字段的值应该是 prepare 回调函数。
这是我正在使用的代码(使用 TypeScript 编写):
import { createSlice, createEntityAdapter } from '@reduxjs/toolkit';
import { MyEntityType } from '../../js/types/MyEntityType';
import { v4 as uuidv4 } from 'uuid';
const myEntityAdapter = createEntityAdapter<MyEntityType>();
const { reducer, actions } = createSlice({
name: 'myEntity',
initialState: myEntityAdapter.getInitialState(),
reducers: {
addEntity: {
reducer: myEntityAdapter.addOne,
prepare: (payload) => ({...payload, id: uuidv4()}),
},
removeEntity: myEntityAdapter.removeOne,
updateEntity: myEntityAdapter.updateOne,
}
});
但是,当我编译我的应用程序并测试使用该操作创建实体addEntity
时,prepare
回调似乎没有做任何事情。
这是我使用 Redux DevTools 调度的操作:
{
type: 'myEntity/addEntity',
payload: {myPayloadTrait: 100, id: 'test'} // Expected behavior: this id should be overwritten in the prepare callback
}
结果状态:
myEntity: {
ids: {
0:"test"
},
entities: {
"test": {
myPayloadTrait: 100
id: "test"
}
}
}
为什么我的准备回调"test"
在将有效负载传递给减速器之前不会覆盖 id?任何帮助或指导将不胜感激。