为什么我的一半调度功能无法正常工作?

时间:2018-11-19 21:42:37

标签: reactjs redux

我的中间函数(enemyLoseHp)可以按预期工作。但是,当它调用另一个函数时,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 :(得分:0)

在第一个示例中,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的方式将组件连接到商店来解决此问题。 (尽管我不能肯定地说不看更多的代码。)