3 回答
TA贡献1876条经验 获得超7个赞
您可以改为以布尔值为条件,尝试将当前卡密钥与已检查的卡密钥进行比较
<FontAwesomeIcon icon={this.props.checkedCard == this.props.key ? faCoffee : faCheckSquare} />
并在您的容器中:
handleEnroll = slug => {
this.props.dispatch(Enroll(slug));
this.setState({checked: this.props.key});
}
和 :
<CourseCard
key={video.slug}
video={video}
checkedCard={this.state.checkedCard}
TA贡献1828条经验 获得超6个赞
由于您正在检查Grid
组件当前用户是否已注册(通过查看该video.enrolled_students
数组是否包含当前用户),那么这些enrolled
和unrolled
标志似乎不再需要了。
因此,Grid
您应该能够将第一个<FontAwesomeIcon />
调用更改为:
<FontAwesomeIcon icon='faCheckSquare' />
第二个到
<FontAwesomeIcon icon='faCoffee' />
此外,您在 AllCourses 中有一个拼写错误,您this.props.dispatch(Enroll(slug));
在这两个课程中都调用了它handleEnroll
,handleUnroll
并且它最有可能Unroll(slug)
在第二个中调用。
TA贡献1951条经验 获得超3个赞
这是因为 handleEnroll 和 handleUnroll 设置了所有课程共享的状态。根据您的描述,听起来您希望状态实际上是每门课程。
所以你应该AllCourses稍微改变一下
handleEnroll = slug => {
// This should cause some change to the relevant course in allCourses
this.props.dispatch(Enroll(slug));
}
handleUnroll = slug => {
// This should cause some change to the relevant course in allCourses
this.props.dispatch(Enroll(slug));
}
// Delete this
this.state = {
enrolled: true,
unrolled: true
};
然后更改 CourseCard 映射以使用来自video而非现已淘汰的 AllCourses 状态的属性。
{allCourses.map(video => (
<CourseCard
key={video.slug}
video={video}
enrolled={video.enrolled}
unrolled={video.unrolled}
handleEnroll={this.handleEnroll}
handleUnroll={this.handleUnroll}
normaluser={normaluser}
adminuser={adminuser}
userauthenticated={userauthenticated}
adminauthenticated={adminauthenticated}
/>
))}
添加回答
举报