Javascript 动作创作者在Redux中的火力不同,如何应对?
这是我的密码:Javascript 动作创作者在Redux中的火力不同,如何应对?,javascript,reactjs,redux,Javascript,Reactjs,Redux,这是我的密码: const onHandleAction = (e, action) => { // props.resetPage() switch (action) { case 'set': onChangeSet(e) break; case 'class': onChangeClass(e)
const onHandleAction = (e, action) => {
// props.resetPage()
switch (action) {
case 'set':
onChangeSet(e)
break;
case 'class':
onChangeClass(e)
break;
case 'manaCost':
onChangeManaCost(e)
break;
case 'search':
onHandleSearch()
break;
}
}
const onChangeSet = e => {
props.resetPage()
if (e.target.value === 'Arena') {
props.setGameMode(e.target.value);
} else {
props.setActualSet(e.target.value);
}
};
const onChangeClass = e => {
props.resetPage()
const classValue =
e.target.value === 'All Classes' ? 'all' : e.target.value;
props.setClass(classValue);
};
const onChangeManaCost = e => {
props.resetPage()
if (props.manaCost.every(m => m !== e.target.value)) {
props.setManaCost(e.target.value)
} else {
props.removeManaCost(e.target.value)
}
};
正如你可能注意到的那样
props.resetPage()
重复3次。我试着把它放在我的手上,所以它会在任何动作之前启动,但它不起作用。如果我让代码保持原样,一切正常。如何减少这行代码以避免重复太多次?调用
props.resetPage()代码>内部onHandleAction
应该可以工作。另一个选项是创建一个包装函数,该函数将调用reset
prop,并将该操作与其他参数一起作为回调。这种方法的另一个好处是,您可以选择重置页面的操作:
const actionWithReset = (action, ...args) => {
props.resetPage();
action(args);
}
const onHandleAction = (e, action) => {
switch (action) {
case 'set':
actionWithReset(onChangeSet, e)
break;
case 'class':
actionWithReset(onChangeClass, e)
break;
case 'manaCost':
actionWithReset(onChangeManaCost, e)
break;
case 'search':
onHandleSearch()
break;
}
}
resetPage
做什么?它不会产生任何会触发此组件重新加载的事件