Javascript ReactJS:如何在更改状态后立即更新组件
我的页面需要从服务器获取数据,这可能需要几秒钟的时间。因此,我希望在获取时显示“加载…”。因此,我有一个布尔状态变量Javascript ReactJS:如何在更改状态后立即更新组件,javascript,reactjs,Javascript,Reactjs,我的页面需要从服务器获取数据,这可能需要几秒钟的时间。因此,我希望在获取时显示“加载…”。因此,我有一个布尔状态变量loading,用于指示它是否正在获取数据。如果load为true,render()函数显示“立即加载”,否则显示“未加载”。然而,事实证明,在将load设置为true之后,react无法重新渲染组件 这是你的电话号码 var Hello=React.createClass({ getInitialState:函数(){ 返回{ 加载:false, }; }, handleClic
loading
,用于指示它是否正在获取数据。如果load
为true
,render()
函数显示“立即加载”,否则显示“未加载”。然而,事实证明,在将load
设置为true之后,react无法重新渲染组件
这是你的电话号码
var Hello=React.createClass({
getInitialState:函数(){
返回{
加载:false,
};
},
handleClick:function(){
这是我的国家({
加载:正确
},函数(){
//模拟提取数据的虚拟循环
对于(var i=0;i,因为JS是单线程的。当您运行循环时,整个页面冻结。所以它不会对这个问题做出反应
获取数据是异步操作,它不会冻结页面。
您可以使用setTimeout
对其进行仿真。在这种情况下,所有这些都可以正常工作
例如:
handleClick: function(){
this.setState({
loading: true
}, function(){
setTimeout(function() {
this.setState({
loading: false,
});
}.bind(this), 3000)
}.bind(this));
},
因为JS是单线程的。当你运行循环时,整个页面都会冻结。所以它不会对这个问题做出反应
获取数据是异步操作,它不会冻结页面。
您可以使用setTimeout
对其进行仿真。在这种情况下,所有这些都可以正常工作
例如:
handleClick: function(){
this.setState({
loading: true
}, function(){
setTimeout(function() {
this.setState({
loading: false,
});
}.bind(this), 3000)
}.bind(this));
},
你可以试着这样想
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>);
}
});
var Hello=React.createClass({
getInitialState:函数(){
返回{
加载:错误
};
},
handleClick:function(){
取回(“http://sampleurl.com")
.then(功能(数据){
//如果成功
this.setState({loading:true})
})
},
render:function(){
var结果;
if(this.state.loading==true){
结果=立即加载
}否则{
结果=未加载
}
返回(
负载
{/*此处呈现变量结果*/}
{result}
);
}
});
你可以这样想
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>);
}
});
var Hello=React.createClass({
getInitialState:函数(){
返回{
加载:错误
};
},
handleClick:function(){
取回(“http://sampleurl.com")
.then(功能(数据){
//如果成功
this.setState({loading:true})
})
},
render:function(){
var结果;
if(this.state.loading==true){
结果=立即加载
}否则{
结果=未加载
}
返回(
负载
{/*此处呈现变量结果*/}
{result}
);
}
});
代码中没有获取
变量。你是说加载
?是的。我会编辑它。代码中没有获取
变量。你是说加载
?是的。我会编辑它。太棒了!我不知道。谢谢!太棒了!我不知道。谢谢!关于你的信息,集合的第二个参数tate是在更新完成后调用的回调。请参阅setState的第二个参数是在更新完成后调用的回调。