- 此问题在此处已有答案**:
(17个答案)
What does return
keyword mean inside forEach
function? [duplicate](2个答案)
5小时前关门了。
到目前为止,我已经使用GET_TOURNAMENTS
将所有锦标赛对象设置为我的状态,并将它们呈现在页面上。
然后,我给每个锦标赛一个调用showTournament()
的按钮,它选择我点击的任何锦标赛,并更新状态。当我点击SHOW_TOURNAMENT
时,我的状态如下所示:
tournament
tournaments: [{...}, {...}] <<~~this is from GET_TOURNAMENTS
showTournament: { <<~~begins as (showTournament: "") until showTournament() action
_id: "etc",
title: "Tournament One",
status: "Open",
participants: [ <<~~an array of User objects
0: {_id: "asdf", username: "asdf"},
1: {_id: "asdf", username: "asdf"}
]
}
Annnnnnnnd我尝试通过以下操作在ShowTournament组件中呈现所有这些内容:
class TournamentShow extends Component {
static propTypes = {
tournament: PropTypes.object.isRequired,
auth: PropTypes.object.isRequired
};
render() {
const { _id, title, hostedBy, status, participants } = this.props.tournament.showTournament;
return (
<div>
<h1>{ title }</h1>
<p>status: { status }</p>
<p>Registered Participants:</p>
{
participants ?
participants.forEach(participant => {
return (
<ul>
<li>{participant}</li>
</ul>
)
}) :
null
}
<p>Hosted by: { hostedBy }</p>
<Link to="#">Sign Up</Link><br/>
<Link to="/">Back to Tournaments main page</Link>
</div>
)
}
};
const mapStateToProps = state => ({
tournament: state.tournament,
auth: state.auth
});
export default connect(mapStateToProps, { showTournament })(TournamentShow);
这将不显示任何内容。即使数组中存在参与者,也不会呈现任何内容。
我也尝试简单〈〈~~编辑:一开始我把标签放在里面,放在{}外面
<p>Registered Participants:</p>
<ul>
{
participants.forEach(participant => {
return (
<li>{participant}</li>
)
})
}
</ul>
我得到了错误TypeError: Cannot read property 'forEach' of undefined
所有来自showTournament
的非数组数据呈现得很好..我发现了其他堆栈溢出问题,并尝试了许多解决方案,但其他问题只是不同的足够,我不能弄清楚如何获得正确的实现。
谢谢大家!
2条答案
按热度按时间rjee0c151#
1)你需要使用
map
,因为forEach
不返回任何东西,所以你在forEach
中返回的任何东西对forEach
的外部世界都是不可见的。map将返回一个数组。2)你想用
{participant}
做什么?它是一个对象,所以要么用JSON.stringify(participant)
打印它,要么更好,分别打印_id
和username
,如下所示:3)如果你得到了一个你所说的错误,那么
participants
很可能是undefined
。你能试着调试一下,看看它的值是否被填充了吗?如果调试不可能,简单地试着用甚至
rks48beu2#
首先你需要使用Array.prototype.map()来渲染一个数组,Array.prototype.forEach()不返回任何要渲染的东西,它只是对每个数组项应用给定的函数。
然后确保你有正确的数据从一个还原器,只是设置一个
breakpoint
或使用console.log
看到thich数据,你试图渲染。