javascript - OnChange 方法不会更新状态
问题描述
我有一个不会更新我的 redux 状态的 onChange 方法。如果我在 onChange 内进行 console.log,它看起来是正确的,但在 onChange 之外,什么都没有发生,我不明白为什么。如果有错误,我正在尝试清除错误,但我的 redux 商店中没有任何反应。
这是一些代码:
const onChange = (e) => {
let errors = reportIncidentState.errors || {};
const { attr } = e.target.dataset;
const updates = { [attr]: e.target.value };
const clearErrors = (keys = []) => {
errors = Object.keys(errors)
.reduce((prev, curr) => ((typeof keys === 'string' && keys === curr)
|| keys.indexOf(curr) > -1
? prev : { ...prev, [curr]: errors[curr] }),
{});
};
clearErrors(attr);
switch (attr) {
case 'partialSick':
updates[attr] = true;
updates.fullsick = false;
clearErrors(['partialSick', 'fullsick']);
break;
case 'fullsick':
updates[attr] = true;
updates.partialSick = false;
clearErrors(['partialSick', 'fullsick']);
break;
case 'unsureOfDate':
updates[attr] = e.target.value;
clearErrors(['dayofSickness', 'additionalInformation']);
break;
case 'hasQuit':
updates[attr] = e.target.value;
clearErrors(['quitDate']);
break;
default:
break;
}
reportIncidentUiActions.updateErrors({ errors });
reportIncidentUiActions.updateIncidentUpdate(updates);
};
减速器:
case UPDATE_ERRORS:
return {
...state,
errors: {
...state.errors,
...action.payload.errors,
},
update: {
...state.update,
...action.payload.updates,
},
};
行动:
export const updateErrors = ({ errors: errs }) => (
{
type: UPDATE_ERRORS,
payload: { errors: errs },
}
);
我希望如果一个按钮没有被点击,但它需要,一个错误会出现,而且确实如此。然后我希望单击按钮时错误会消失,但它不会消失。在我的 redux 商店中,错误仍然存在..
解决方案
我认为这只是因为这里:
return {
...state,
errors: {
...state.errors,
...action.payload.errors,
},
您正在将现有错误与已清除的错误合并- 它无法删除项目。
根据您的用例,您可以这样做:
errors: action.payload.errors,
或者您可以添加如下内容:
case REMOVE_ERRORS:
const errors = { ...state.errors };
action.payload.errors.forEach((error) => {
delete errors[error];
});
return {
...state,
errors
};
然后在删除错误时触发它。
推荐阅读
- powerbi - 是否可以在 Power BI 中制作成簇双列/堆积柱形图
- sql - 尝试使用 TwinCat 2 插入 SQL 数据库时出现错误 262145
- docker - 您的本地 docker 镜像集合是注册表吗?
- azure - azure apim 中的 SOAP 响应数据操作
- c - CS50 pset 3 Plurality - 工作到……分段错误,没有足够的投票提示?
- azure-devops - 如何部署具有已知(和接受)数据丢失的 DACPAC 版本
- java - java麦克风TargetDataLine灵敏度/最大输入幅度
- twilio - 如何知道何时从 Twilio 转接了呼叫?
- javascript - Highcharts 仪表板页面加载缓慢
- r - 如何使用 group by 和 mutate 提高效率