reactjs - ReactJS 通过单击另一个组件来更新组件
问题描述
嘿,我对 ReactJS 有点陌生,也许我使用了错误的方法,但这就是我得到的。
我有 2 个组件“Course.js”和“WeekDays.js”。
所以我的基本想法是我有一个包含本周日期的“每周”日历和一个基于“每周”日期返回课程的 json API。这本身就可以正常工作。但是当我尝试改变“一天”的状态时它似乎不起作用
这是我的工作日片段
state = {
day: "",
}
handleClick = (e) =>{
this.setState({day:e.target.id})
}
render() {
return (
<div id="WeeklyCalendar" className="row grid">
<div id="Days" className="col-md-12">
<div className="row">
{ this.state.weeks.map(WeekDays =>
<div id={WeekDays.DaysNumber} onClick={this.handleClick} className={`col ${WeekDays.Class}`} key={WeekDays.DaysNumber}>
<span>{WeekDays.DaysNumber}</span>
</div>
)}
</div>
</div>
<div id="SideMenu" className="col-md-3">
<Courses value={this.state.day} />
</div>
</div>
);
}
这是我的课程片段
state = {
course:[]
}
getJson(){
axios.get("?day=" + this.props.value)
.then(res => {
const course = res.data;
this.setState({ course:course });
})
}
componentDidMount() {
this.getJson();
}
render() {
return (
<div className="row">
{ this.state.course.map(course =>
<div className={`col-md-12 course_${course.id} `} key={course.id}>
{course.title}
</div>
)}
</div>
);
}
现在正如我所说,这可以自行工作,如果我设置<Course value="16" />
它可以工作,但是当我使用 onclick 功能执行此操作时它不会改变状态
它适用于任何地方,但它不会重新渲染我的组件。如果我在渲染函数中使用 {this.state.day},它就可以正常工作。我在这里错过了什么吗?
解决方案
不确定这是否是您想要的,但您可以做的是使用componentDidUpdate
调用getJson
.
这里的问题是您只调用该函数componentDidMount
并且如果this.props.value
更改将不会再次调用它。
componentDidUpdate(prevProps){
if(prevProps.value !== this.props.value) {
this.getJson()
}
}
推荐阅读
- php - 使用开关元素更新 DB 值
- c - c 中分配给函数参数的最大寄存器数
- spring - Spring Boot 多个端口?
- php - 第一次添加到购物车在 Woocommerce 中显示 0 件商品
- cordova - 使用电子科尔多瓦的 Ionic 3 构建应用程序不可用
- python - Spyder中的属性错误
- laravel-5.2 - 如何在 laravel 5.2 中生成 RTF 文件?
- typescript - 将常量导入 Vue 组件
- python - Can't Read the latest Messages from kafka topic
- svn - 访问 SVN 时出错:E175002:SSL 握手失败