Почему половина моих функций отправки не работает? - PullRequest
0 голосов
/ 20 ноября 2018

Моя средняя функция (templeLoseHp) работает отлично, как задумано. Однако при вызове другой функции все, что находится внутри return function(dispatch), не работает.

Вот сломанный пример:

const getEnemyHp = (i) => {
    console.log('reached');
    return function (getState){
        console.log('not reached');
        return getState().enemy[i].stats.hp;
    }
}



export const enemyLoseHp = (hp, i) => {
    return function (dispatch, getState) {
        dispatch({
            type: 'ENEMY_LOSE_HP',
            hp,
            i
        })
        let remainingHp = getEnemyHp(i);
        if (remainingHp <= 0) {
            killEnemy(i);
        }
    }
}

export const killEnemy = (i) => {
    console.log('reached')
    return function (dispatch) {
        console.log('not reached')
        dispatch({
            type: 'KILL_ENEMY',
            i
        })
    } 
}

У меня нет этих проблем, если я передаю им getState вручную, как показано в коде ниже, но я не думаю, что именно так я должен это сделать:

const getEnemyHp = (i, getState) => {
    console.log(getState().enemy[i].stats.hp)
    return getState().enemy[i].stats.hp;
}



export const enemyLoseHp = (hp, i) => {
    return function (dispatch, getState) {
        dispatch({
            type: 'ENEMY_LOSE_HP',
            hp,
            i
        })
        let remainingHp = getEnemyHp(i, getState);
        if (remainingHp <= 0) {
            killEnemy(i, dispatch);
        }
    }
}

export const killEnemy = (i, dispatch) => {
        dispatch({
            type: 'KILL_ENEMY',
            i
        })
}

что мне не хватает?

1 Ответ

0 голосов
/ 20 ноября 2018

В первом примере getEnemyHp возвращает функцию, которую вы никогда не вызываете.Вы можете сделать это:

export const enemyLoseHp = (hp, i) => {
  return function (dispatch, getState) {
    dispatch({
        type: 'ENEMY_LOSE_HP',
        hp,
        i
    })
    let remainingHp = getEnemyHp(i)(getState);
    if (remainingHp <= 0) {
      killEnemy(i);
    }
  }
}

Хотя это технически работает, вы можете решить эту проблему более аккуратно, подключив свой компонент к магазину таким образом, чтобы избежать использования getState в целом.(Хотя я не могу сказать наверняка, не увидев больше вашего кода.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...