gpt4 book ai didi

javascript - 如何覆盖 redux reducer 中的默认状态参数?

转载 作者:行者123 更新时间:2023-11-29 20:53:11 25 4
gpt4 key购买 nike

我有这样的东西。假设以下文件是 reducers123.js

import {combineReducers} from 'redux';
import * as types from './actionTypes';

function reducer1(state = {
someId: 0,
someCategory: []
}, action) {
switch(action.type) {
'someActionType1' :
state.someCategory = action.someCategoryData;
break;
'someActionType2' :
state.id = action.someId;
break;
}
}


const appReducer = combineReducers({reducer1});
export default appReducer;

我在测试文件中调用上面的 reducer 如下。

import reducers from `./reducers123.js`;

describe('some reducer test case', () => {
it('test case', () => {
reducers({someCategory: ['d1', 'd2', 'd3']}, {type: 'someActionType1'});
});
});

所以这里它应该将 someCategory 数据作为 ['d1', 'd2', 'd3'] 但它采用我定义的空数组 []最初。我需要在我的测试用例中覆盖 someCategory 数组的值。那么怎么做呢。请帮我。

提前致谢。

最佳答案

首先,你的reducer写错了。 state.someCategory = action.someCategoryData; 行正在改变现有的 state 参数 - 不要那样做!相反,您应该制作 state 对象的副本 并覆盖副本中的 someCategoryData 字段。查看Immutable Update Patterns Redux 文档中的页面以获取示例。

其次,当您使用 combineReducers 时,您是在说您希望此切片缩减器处理状态的一个特定键/切片。当您运行 combineReducers({reducer1}) 时,您正在定义一个状态形状,它是一个对象,其中的键为 reducer1。因此,您的测试需要传入如下对象:

const testState = {
reducer1 : {
someId : 123,
someCategory : ["d1", "d2", "d3"]
}
}

const result = reducers(testState, {type : "someActionType1"});
// assert that the result is what you expect

我建议将您的 reducer 函数单独导出为命名导出,以便您可以自行测试它,并将合并的 reducer 导出为默认导出。我还建议通读 Using combineReducers Redux 文档中的部分。

关于javascript - 如何覆盖 redux reducer 中的默认状态参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50727263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com