【发布时间】:2022-11-18 06:29:22
【问题描述】:
有人可以帮我解决这个问题吗?我有一个名为“filteredPokemon”的状态,它根据一些东西获取一个 pokemon 列表,然后我将它传递给这个名为 PokemonDisplayArea 的函数,在那里我继续显示 pokemon 列表。但是,当我更改偏移量时,我希望将行为添加到“卡片”的先前状态,这是呈现 HTML 的元素,但是相反,它会获取最新的 filteredpokemon 并将其附加两次。任何帮助,将不胜感激!
这是一个视频 https://clipchamp.com/watch/EcMJbOMjOaL
编码:
function PokemonDisplayArea({pokemons}) {
const [filteredPokemon, setFilteredPokemon] = useState([]);
const [offset, setOffset] = useState(20);
const [cards, setCards] = useState([]);
useEffect(() => {
let cardsSkele = [];
if (filteredPokemon.length > 0) {
for (let i = 0; i < filteredPokemon.length; i++) {
if (undefined !== filteredPokemon[i].name) {
cardsSkele.push(<PokemonCard key={filteredPokemon[i].id} name={filteredPokemon[i].name}></PokemonCard>);
cardsSkele.sort((a, b) => a.key - b.key)
}
}
setCards(prevArray => [...prevArray, ...cardsSkele]);
}
}, [filteredPokemon])
// SEARCH POKEMON RESULTS
// FILTER POKEMON RESULTS
return (
<div className="pokemon__display-area">
<GetFilteredPokemon pokemons={pokemons} amount={20} offset={offset} filteredPokemon={filteredPokemon} setFilteredPokemon={setFilteredPokemon}></GetFilteredPokemon>
{cards}
</div>
)
}
任何帮助将不胜感激,我是初学者,谢谢!
我尝试将不同的状态传递给 useEffect,并尝试在控制台记录数据,但数据似乎变化良好,列表只是重复。
【问题讨论】:
-
无需在 useEffect 中创建新的现有卡片数组,您需要首先检查过滤的口袋妖怪中的项目是否是现有卡片的一部分,然后合并数据并合并,这将消除重复
-
这个
useEffect的目的是为filteredPokemon中的项目设置cards吗?还是对之前的item设置cards并过滤合并? -
@JohnLi 它应该从 filteredPokemon 中获取更改后的更新数据,并将新数据附加到之前已经存在的数据中。
标签: javascript reactjs ecmascript-6