에 도달하기 전에 발견 된이다 보기에서 감속기에 수정 된 appClasses를 보내 appClasses 상태를 업데이트하려고합니다. 하지만 감속기에 도달하기 전에 오류가 발생합니다. 당신이 볼 수 있듯이 나는에 새로 수정 appClasses를 사용하기 때문에돌아 오는 상태 변이 나는 액션 this.props.appClasses 이에보기에서 보내고있다 감속기
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 상태 (한 감속기에 있음)를 수정하고 수정 된 appClasses를 함수 호출 onother action dispatch (handleUpdateInitialSourceFetch (appClasses))에 전달하여 수정하려고합니다. 내가 (사용자의 선택을 취급하는 다른 감속기에) 다른 상태 selection.appClassesIds을 수정할 :
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 변수를 보낼 수 있습니다. 또는 선택 항목과 appClasses 상태를 하나의 큰 상태로 두어 서로에 의존하기 때문에 두 상태 모두에 액세스 할 수 있어야합니까?
{ type: types.TOGGLE_APP_CLASS, payload: appClass.appClassId }
주 수정 수행해야합니다 :
'appClasses'가 이미 상태입니까? 나는 네가 직접 국가에 돌연변이를 일으키고 있니? –
예. this.props.appClasses에서 얻은 상태입니다. –
상태를 직접 변경해서는 안됩니다. 그것은 Redux의 주요 철학 중 하나입니다. 일반적으로이 전환은 여기에 전체 배열을 설정하는 것이 아니라 ID와 새 상태를 전달하여 나타냅니다. 감속기에서는 이전 상태를 복사하고 새 앱 클래스 상태로 접합합니다. –