在这个反应代码中我试图将数据设置为当前状态,在将数据设置为状态之后我需要在固定数据表中使用它。为了实现它,我写了如下。主要问题是声明在 componentDidMount 中“this.setState ”旁边没有执行/到达我需要在那里调用数据表函数的位置。 这是我的代码:
export default class Main extends React.Component {
constructor(props) {
super(props);
this.state = {
result: [],
loading: false,
filteredRows: null,
filterBy: null,
};
}
getZipData() {
//Here i got the data from server
}
componentDidMount() {
this.getZipData().then((data)=>{
console.log("data:"+data.length);
this.setState({result:data,loading:true}); //state successfully set here.
console.log("result:*******************"+this.state.result.length); //this console is not printed
this._filterRowsBy(this.state.filterBy)
});
};
_rowGetter(rowIndex){
alert("row Getter");
return this.state.filteredRows[rowIndex];
}
_filterRowsBy(filterBy){
var rows = this.state.result.slice();
var filteredRows = filterBy ? rows.filter((row)=>{
return row.RecNo.toLowerCase().indexOf(filterBy.toLowerCase()) >= 0
}) : rows;
this.setState({
filterRows,
filterBy,
})
}
_onFilterChange(e){
this._filterRowsBy(e.target.value);
}
render() {
if(this.state.loading==false) {
return (
<div className="row-fluid">
<img className="col-sm-6 col-sm-offset-3 col-xs-6 col-xs-offset-3"
src="http://www.preciseleads.com/images/loading_animation.gif"/>
</div>
)
}
else{
console.log("result:////////////////////"+this.state.result.length); //this console is printed
console.log("loading completed");
return(
<div>
<!-- fixed data table code goes here -->
</div>
)
}
}
}
状态已成功更新,但在未达到该语句后,IN componentDidMount , 任何帮助非常感谢。
答案 0 :(得分:1)
为Promise添加一个catch处理程序。我想你得到了一个错误。
答案 1 :(得分:0)
嗨,这可能是你的问题,
Facebook的:
setState()不会立即改变this.state但会创建一个 待定状态转换。调用后访问this.state 方法可以返回现有值。没有 保证调用setState和调用的同步操作 为获得业绩增长而受到批评。 setState()将始终触发a 除非实现条件渲染逻辑,否则重新渲染 shouldComponentUpdate()。如果正在使用可变对象而且 逻辑无法在shouldComponentUpdate()中实现,调用 setState()仅在新状态与先前状态不同时 将避免不必要的重新渲染。
this.setState({result:data,loading:true}, () => {
// Your logic
});
第二个参数是一个回调函数,在设置状态后调用。
希望这会有所帮助:)
编辑:我没有看到不变的错误,(从评论中,你可以提供完整的错误)