transactions是对象,不是数组呢
时间: 2024-02-26 16:56:45 浏览: 26
如果`state.transactions`是一个对象,而不是一个数组,我们可以使用`createSlice`函数的`reducers`字段来定义一个reducer,然后使用展开运算符将旧对象和新对象合并。以下是一个示例代码:
```javascript
import { createSlice } from '@reduxjs/toolkit';
const transactionsSlice = createSlice({
name: 'transactions',
initialState: {
transactions: {},
},
reducers: {
mergeTransactions: (state, action) => {
const { oldTransaction, newTransaction } = action.payload;
const { [oldTransaction.id]: _, ...restTransactions } = state.transactions;
state.transactions = {
...restTransactions,
[oldTransaction.id]: { ...oldTransaction, ...newTransaction },
};
},
},
});
export const { mergeTransactions } = transactionsSlice.actions;
export default transactionsSlice.reducer;
```
在上面的代码中,我们使用展开运算符将`state.transactions`对象的旧事务和新事务合并为一个新对象,并将其设置为对象的新属性。我们还使用对象解构和计算属性名来删除旧事务,并创建一个不包含旧事务的新对象。
这个reducer与前面的例子一样,可以在组件中调用`dispatch(mergeTransactions({ oldTransaction, newTransaction }))`来触发它并合并旧对象和新对象。