javascript - 如何在 reactJS 中的 .map() 中使用 setTimeout
问题描述
我有一系列玩家,我通过这些玩家进行映射。用户不断地向这个数组添加新玩家。我通过数组映射并返回一组元素。我希望列表中的每个玩家一次渲染一个,其间间隔为 500 毫秒。这是我到目前为止的代码:
export const ShowDraftedPlayers = props => {
const {
draftedPlayers,
getPlayerProfile,
teams,
draftPos,
myTeam } = props;
let playersDraftedList = draftedPlayers.map((player, index) => {
return (
<div key={index} className='drafted'>
<p style={style}>TEAM {player.teamDraftedBy} </p>
<b className='player-lastName'> {player.displayName} </b>
{player.position}
</p>
</div>
)
})
return (
<div className='draftedPlayers-container'>
{playersDraftedList}
</div>
)
}
解决方案
您可以使用效果创建每 500 毫秒更新一次计数器的间隔;然后,您的渲染逻辑可以每次渲染一个不断增长的数组切片。
export const ShowDraftedPlayers = props => {
const {
draftedPlayers,
getPlayerProfile,
teams,
draftPos,
myTeam
} = props;
const [count, setCount] = useState(0);
useEffect(() => {
let counter = count;
const interval = setInterval(() => {
if (counter >= draftedPlayers.length) {
clearInterval(interval);
} else {
setCount(count => count + 1);
counter++; // local variable that this closure will see
}
}, 500);
return () => clearInterval(interval);
}, [draftedPlayers]);
let playersDraftedList = draftedPlayers.slice(0, count).map((player, index) => {
return (
<div key={index} className='drafted'>
<p style={style}>TEAM {player.teamDraftedBy} </p>
<b className='player-lastName'> {player.displayName} </b>
{player.position}
</p>
</div>
)
})
return (
<div className='draftedPlayers-container'>
{playersDraftedList}
</div>
)
}
推荐阅读
- sql - 从 FROM 中的子查询中获取 max 属性的行
- r - 按日期范围分组数据 R
- python - 有没有办法得到随机生成的数字的总和?
- php - 如何在php中组合foreach循环
- ruby-on-rails - 如何解决这个印象派宝石错误?
- amazon-web-services - 在 AWS Lambda 层中找到等效的环境变量?
- r - 无法通过 ShinyR 中的 if 语句获得禁用按钮以与 observeEvent 一起使用
- flutter - setState 未定义 | 不需要定义?
- linux - dotnet CLI 运行没有 cs 文件的单个字符串,例如 dotnet run "System.Console(DateTime.Now);" 在 Linux 上
- docker - 当所有给定的 gpg 密钥服务器都不可用时,我可以使用另一个 gpg 密钥服务器吗?