ReactJs , DOM does not get updated
ReactJs , DOM does not get updated
在以下代码中:
componentDidUpdate(){
let self = this;
this.state.carsOfChoosenDriver = []; // array where I want to save the cars belonging to the choosenDriver
if (typeof this.state.choosenDriver.cars !== 'undefined'){
this.state.choosenDriver.cars.forEach(function(entry) {
request
.get('api/cars/' + entry)
.end(function(err, res){
self.state.carsOfChoosenDriver.push(res.body);
console.log(self.state.carsOfChoosenEvent);
});
});
}
}
handleEventClick(i){
this.setState({choosenDriver: this.state.drivers[i]});
}
我从触发handleEventClick()
的列表中选择一个驱动程序。choosenDriver.cars
包含一个id数组,我用它从数据库中获取汽车对象。这一切工作和res
得到登录到控制台。
但是dom在第一次点击handleEventClick()
时没有得到更新。
在渲染方法中,我有这个:
render() {
let cars = this.state.carsOfChoosenDriver.map(function(car, i){
return <li key={i}>{car.name}</li>;
});
return (
<div className="col-md-8">
{cars}
</div>
);
}
我是否应该使用另一个生命周期方法或者我做错了什么?
更新:componentDidMount() {
let self = this;
request
.get('api/driver')
.end(function(err, res){
self.setState({drivers: res.body});
});
}
您应该将componentDidUpdate
中的代码移到componentWillUpdate
中。
componentDidUpdate
在render()
完成刷新所有DOM更新后调用,这不是您想要的,因为您希望反映由handleEventClick(i)
componentWillUpdate
在render()
之前被调用,将在触发render()
之前完成self.state.carsOfChoosenDriver
的更改。
同样,你应该使用setState
而不是手动修改组件状态,这不会触发render()
。
.end(function(err, res){
self.state.carsOfChoosenDriver.push(res.body);
console.log(self.state.carsOfChoosenEvent);
});
尝试使用setState
.end(function(err, res){
self.setState({carsOfChoosenDriver: res.body});
console.log(self.state.carsOfChoosenEvent);
});
因为React中的setState
是异步的,但它触发了render()
, render()
将等待异步完成后再冲洗DOM。
相关文章:
- 有没有一种方法可以防止img get请求使用css或js发生
- CORS-重定向到第二个GET正在接收的页面
- jQuery Ajax GET请求工作不正常
- 如何将PHP get查询转换为Meteor's HTTP.get()
- 返回/从Twit's客户端.get
- AngularJS错误:提供程序必须从$get工厂方法返回值
- 如何在router.get()方法中传递url作为参数
- 使用Javascript/JQuery获取JSON GET数据
- 如何使用php文件中的GET来获取我在.js文件中声明的变量
- Get方法获取csv文件的内容
- 什么'$.get和$.ajax之间的区别是什么
- I'我得到这个.get()在ember中未定义
- Babel编译错误:找不到模块核心js/library/fn/get迭代器
- Datatable get列值只给出前10行
- Angularjs http.get() Cross-Origin 请求被阻止
- Angular js http get返回所有页面
- Get JSON from an url
- 将GET请求(HTML字符串)转换为完整的DOM对象
- regex get id imgur embed?
- ReactJs , DOM does not get updated