Действие создателей по-разному срабатывает в Redux, как бороться? - PullRequest
0 голосов
/ 05 марта 2020

Вот мой код:

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, чтобы он срабатывал перед любым из этих действий, но он не работает. Если я оставлю код, как он все работает нормально. Как уменьшить эту строку кода, чтобы не повторять ее слишком много раз?

1 Ответ

1 голос
/ 05 марта 2020

Вызов 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;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...