ReactJS:如何在改变状态后立即更新组件
ReactJS: how to immediately update component after changing state
我的页面需要从服务器获取数据,这可能需要几秒钟的时间。因此,我想在提取时显示"正在加载…"。所以我有一个布尔状态变量loading
来指示它是否正在获取数据。如果loading
为true
,则render()
功能显示"正在加载",否则显示"未加载"。然而,事实证明,在将loading
设置为true之后,react无法重新渲染组件。
这是小提琴。
var Hello = React.createClass({
getInitialState: function() {
return {
loading: false,
};
},
handleClick: function() {
this.setState({
loading: true
}, function() {
// dummy loop to simulate fetching data
for (var i=0;i<=100000;i++) {
console.log("dummy");
}
this.setState({
loading: false,
});
}.bind(this));
},
render: function() {
if (this.state.loading) {
return (
<div>
<button onClick={this.handleClick}>
load
</button>
<p>Loading now</p>
</div>
);
}
return (
<div>
<button onClick={this.handleClick}>
load
</button>
<p>Not Loading</p>
</div>
);
}
});
ReactDOM.render(
<Hello />,
document.getElementById('container')
);
因为JS是单线程的。当您运行循环时,整个页面将冻结。所以它没有反应问题。
获取数据是异步操作,不会冻结页面。您可以用setTimeout
来模拟它。在这种情况下,一切都是正确的。
示例:
handleClick: function(){
this.setState({
loading: true
}, function(){
setTimeout(function() {
this.setState({
loading: false,
});
}.bind(this), 3000)
}.bind(this));
},
JSFiddle
您可能会尝试这样思考;
var Hello = React.createClass({
getInitialState: function(){
return {
loading: false
};
},
handleClick: function(){
fetch("http://sampleurl.com")
.then(function(data){
//if success
this.setState({loading: true})
})
},
render: function() {
var result;
if(this.state.loading == true){
result = <p>Loading Now</p>
} else {
result = <p>Not Loading</p>
}
return (
<div>
<button onClick={this.handleClick}>load</button>
{/*render variable result here*/}
{result}
</div>);
}
});
相关文章:
- 调度没有'无法立即更新组件
- React js更改状态不会更新组件
- 如何使用JavaScript更新JSP页面的一些组件
- 如何在加载Angular2.RC1子组件时更新它
- ReactJS组件中显示的视频未更新
- 如何创建独立于数组更新的组件列表
- 组件道具更改后更新redux存储
- 如何根据其他组件中的事件更新组件URL
- 在ReactJs中更新组件时更新jQuery slick carousel
- ReactJS:如何在改变状态后立即更新组件
- ReactJS - 在更改单独的类属性时更新组件
- Redux未更新组件
- 更新组件后,Javascript无法工作
- 从外部更新组件属性
- React用class查找所有组件,从外部更新组件状态或道具.模态叠加
- React-Redux connect()不更新组件,即使状态被改变而没有突变
- 道具值更改时更新组件
- Reactjs更新组件DidMount
- 反应:从渲染方法外部更新组件的 props,而不使用状态
- 如何获取模拟的反应事件以更新组件中 ref 的值