javascript - MERN,Mongoose:我随机化了一个数组并将其保存到 Mongo,但我必须刷新页面
问题描述
比赛应用程序。
当用户注册时,它们存储在Tournament.participants
数组中。
锦标赛开始时,所有用户Tournament.participants
都被随机推送到Tournament.bracket.players
处理此问题的路线:
router.post('/:id/shuffle-players', (req, res) => {
const shuffleParticipants = array => {
let currentIndex = array.length, temporaryValue, randomIndex;
while(0 !== currentIndex) {
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
};
Tournament.findByIdAndUpdate(req.params.id)
.then(tournament => {
if(!tournament) res.status(404).json({ msg: "Cannot find this tournament" });
else {
const { participants } = req.body;
const { players } = tournament.bracket;
if(players.length !== participants.length) {
const shuffledPlayers = shuffleParticipants(participants);
shuffledPlayers.forEach(player => {
players.push(player);
});
};
return tournament.save();
};
})
.then(savedTournament => res.json(savedTournament))
.catch(err => res.json(err));
});
玩家以随机顺序洗牌,并在前端正确显示。
问题是,当组件第一次渲染时,Tournament.bracket.players
它们以原始顺序显示。
这很奇怪,因为这表明组件在 Post 请求之前呈现,但这不可能,因为Tournament.bracket.players
在请求之前是空的,所以组件应该中断。
我必须刷新页面才能真正让它们随机化。
这是一个带有 Redux 的 MERN 应用程序,我可以发布 reducer/action 逻辑,但我不知道这是否是一个问题。
零件:
export const HostUI = ({ tournament }) => {
const { players } = tournament.bracket;
return (
<div style={{color:"lightgrey"}}>
<h1>Host UI</h1>
{
players && players.map(player => (
<div>
{player.username}
</div>
))
}
</div>
);
};
解决方案
推荐阅读
- azure - Azure 使用 ARM 模板标记资源组
- javascript - 为什么我的函数没有循环显示没有错误显示?
- reactjs - 如何使我在 React 中编码的表单提交到我的电子邮件
- python - 在生成器或其他解决方案中增加计数
- c# - 对多个端点使用 HttpClient 和 HttpClientHandler 的最佳实践是什么?
- c# - 新安装后无法在新项目上打开设计器
- python - Python中动态无限树结构的解决方案
- sql - Jira Software 7.1.2 - 来自 AO_60DB71_SPRINT 的 Sprint ID 与 CustomFieldValue 上的 ID 不匹配
- c++ - 为什么我的 AVL-Insertion 在大输入后返回分段错误?
- python - Qt 无法在小部件上绘制多个 QRect