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
做什么?它不会产生任何会触发此组件重新加载的事件