gpt4 book ai didi

javascript - Redux 在到达 reducer 之前检测到状态突变

转载 作者:行者123 更新时间:2023-12-03 05:09:36 25 4
gpt4 key购买 nike

我正在从 View 发送到操作 this.props.appClasses这是 View :

 <div key={key} className='SDWanAppClassTreeItem' onClick={this.props.actions.handleToggleAppClass.bind(this,this.props.appClasses, 0, key)}>

在修改从 View 中获取的 appClasses 的操作中,我想将修改后的 appClasses 发送到 reducer 以更新 appClasses 状态。但在到达 reducer 之前它给了我一个错误。

A state mutation was detected This is the action:

export function handleToggleAppClass(appClasses, parentAppClassId, appClassId) {
// console.log('handleToggleAppClass', appClassId, this.appClasses[appClassId]);

if (appClass.parentAppClassId == 0) {
// Flip the appClass Show Property
appClasses[appClass.appClassId].show = appClasses[appClass.appClassId].show ? false : true;

if (Object.keys(appClasses[appClass.appClassId].children).length !== 0) {
// Regardless if we enable or disabled the parent, all children should be disabled
for (var childKey in appClasses[appClass.appClassId].children) {
appClasses[appClass.appClassId].children[childKey].show = false;
}
}
} else {
// If we are enabling a child, make sure parent is disabled
if (!appClasses[appClass.parentAppClassId].children[appClass.appClassId].show) {
appClasses[appClass.parentAppClassId].show = false;
}
appClasses[appClass.parentAppClassId].children[appClass.appClassId].show = appClasses[appClass.parentAppClassId].children[appClass.appClassId].show ? false : true;
}

dispatch(handleUpdateInitialSourceFetch(appClasses));

return { type: types.TOGGLE_APP_CLASS, appClasses };
}

如您所见,我确实想修改操作上的 appClasses,因为我必须使用新修改的 appClasses 来更新另一个 reducer 上的另一个状态。在这里,我想修改 appClasses 状态(位于一个 reducer 中),并通过在函数调用中分派(dispatch)修改后的 appClasses 到其他操作中dispatch(handleUpdateInitialSourceFetch(appClasses));我想修改另一个状态selection.appClassesIds(在另一个处理用户选择的reducer中):

const selection = {
timespan: "-3660",
direction: 0,
appClassIds: []
};


export function updateAppClassesIds(appClasses) {
var appClassIds = [];
for (var key in appClasses) {
if (appClasses[key].show) appClassIds.push(key);
if (Object.keys(appClasses[key].children).length !== 0) {
// Regardless if we enable or disabled the parent, all children should be disabled
for (var childKey in appClasses[key].children) {
if (appClasses[key].children[childKey].show) appClassIds.push(childKey);
}
}
}

return { type: types.UPDATE_APP_CLASSES_IDS, appClassIds };
}

如何将 appClasses 变量从 View 发送到操作而不出现该错误。或者我应该将选择和应用程序类状态放在一个大状态中,以便能够访问这两种状态,因为它们相互依赖?

最佳答案

您可以通过创建一个接收要修改的 appClass ID 和新值(true/false)的操作来实现此目的。

然后,您的 reducer 应该能够处理状态更新,然后通过订阅的组件进行传播。

关于javascript - Redux 在到达 reducer 之前检测到状态突变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41875643/

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