我的中间函数(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
})
}
我想念什么?
答案 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
的方式将组件连接到商店来解决此问题。 (尽管我不能肯定地说不看更多的代码。)