javascript - Redux 中 Action 创建者的触发方式不同,如何处理?

标签 javascript reactjs redux

这是我的代码:

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次。我试图将它放在我的 onHandleAction 中,这样它就会在任何这些操作之前启动,但它不起作用。如果我保留代码,一切都会正常。如何减少这行代码不重复太多次?

最佳答案

onHandleAction内调用props.resetPage();应该可以工作。另一种选择是创建一个包装函数,该函数将调用 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;
  }
}

关于javascript - Redux 中 Action 创建者的触发方式不同,如何处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60552772/

相关文章:

reactjs - 何时使用 inputRef.current 而不是 this.inputRef React.js?

Redux-thunk dispatch 不是一个函数

javascript - 如何有条件地隐藏操作表按钮之一?

javascript - 我正在尝试制作一个将两个单词混合在一起的程序,但当我添加一个函数时它就停止工作

javascript - 在链式函数中,哪个先执行?

php - 如何将 json 编码的 PHP 数组转换为 Javascript 中的数组?

javascript - React.js Redux reducer 不插入项目

javascript - 使用 Material-UI 创建自定义变体

reactjs - react redux typescript : connect has missing type error

reactjs - 为什么在handleLogin方法中this.props未定义?