【发布时间】:2022-11-27 08:55:56
【问题描述】:
我必须更新项目状态并立即查看更改。当我在下面这样做时,我得到了一个无限循环。
useEffect(() => {
const playersInFight = gameData.characters.filter((x) =>
fightData.currentPositionInfoDTOS.some((y) => y.entityId == x.id)
);
let orderedCharacters = addPlayers(
playersInFight,
fightData.currentPositionInfoDTOS,
fightData.turnOrder
);
setAllCharacterCards(orderedCharacters);
}, [fightData, gameData, fightInfo, allCharacterCards, allCharacters]);
我也试过这样:
useEffect(() => {
const playersInFight = gameData.characters.filter((x) =>
fightData.currentPositionInfoDTOS.some((y) => y.entityId == x.id)
);
let orderedCharacters = addPlayers(
playersInFight,
fightData.currentPositionInfoDTOS,
fightData.turnOrder
);
setAllCharacterCards(orderedCharacters);
}, [fightData, gameData, fightInfo, allCharacterCards, allCharacters]);
useEffect(() => {
setAllCharacterCards(allCharacterCards);
}, [allCharacterCards]);
多亏了我没有无限循环,但要看到我必须刷新页面的变化...... 我该如何解决这个问题?
更新: 这是我的回报:
return (
<section>
<div className="player-fight">
{allCharacterCards ? (
<div>
{allCharacterCards.map((c, idx) => {
return (
<li key={idx} className="player-fight-bottom__player-card">
<CardComponentPlayerCard
id={c.id}
name={c.name}
money={c.money}
health={c.health}
maxHealth={c.maxHealth}
mine={false}
description={c.description}
statuses={c.statuses}
image={c.photoPath}
/>
</li>
);
})}
</div>
) : (
<LoadingSpinner />
)}
</div>
</section>
);
【问题讨论】:
-
所有这些依赖项是否都会触发更改 [fightData、gameData、fightInfo、allCharacterCards、allCharacters],我的意思是更新 allCharacters 的条件是什么,看起来你可能需要一个 useMemo
标签: javascript reactjs typescript