最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

无法在渲染器中调用的方法内设置状态

IT培训 admin 5浏览 0评论

无法在渲染器中调用的方法内设置状态

我知道对于这个问题有很多答案,但是我觉得它们都不是我想要的。我的问题是我有此应用程序,该应用程序获取所需半径内的商店列表。单击提交时,将使用这些商店信息填充一个数组。我想做的就是能够以我的反应状态将某些信息存储到数组中。我的主要问题是,我想在填充该信息时设置状态,但这会导致无限循环,因为setState再次调用了render方法。希望这可以更好地解释我的问题,下面也有一些代码。感谢您的任何帮助,谢谢!

stores.js

Class stores extends React.Component{
 constructor(props){
  this.state = {
   StoreInfo: [],
   Zip: "",
   Radius: ""
  }
}

RenderTable(zip, radius){

.... some stuff to generate stores within this location

storeInfo = []

for(var i = 0; i < storeArray.length; i++){
  storeInfo.push(storeArray.info);
}

this.setState({StoreInfo: storeInfo});


... generate html to be rendered


}


render(){

var renderPage = (

<div>
 {this.RenderTable(this.state.Zip, this.state.Radius)}
</div>

);

return renderPage;

}

这显然只是我的代码的一个示例,并不是确切的文件,因为原始文件长数千行。

回答如下:

请勿在render()上执行此操作。相反,您可以使用类中的钩子componentDidMount()来完成此操作,如下所示:

componentDidMount() {
if(this.state.StoreInfo.length === 0) {
//set your state here
}
}

在if语句中,您可以验证某些数据的长度以防止其进入渲染循环,而不必是状态内部某些信息数组的长度,而可以是标记您的代码的内容已经加载了信息。您也可以为此创建一个布尔值,并在加载数据时将其设置为true(或false)。

无法在渲染器中调用的方法内设置状态

我知道对于这个问题有很多答案,但是我觉得它们都不是我想要的。我的问题是我有此应用程序,该应用程序获取所需半径内的商店列表。单击提交时,将使用这些商店信息填充一个数组。我想做的就是能够以我的反应状态将某些信息存储到数组中。我的主要问题是,我想在填充该信息时设置状态,但这会导致无限循环,因为setState再次调用了render方法。希望这可以更好地解释我的问题,下面也有一些代码。感谢您的任何帮助,谢谢!

stores.js

Class stores extends React.Component{
 constructor(props){
  this.state = {
   StoreInfo: [],
   Zip: "",
   Radius: ""
  }
}

RenderTable(zip, radius){

.... some stuff to generate stores within this location

storeInfo = []

for(var i = 0; i < storeArray.length; i++){
  storeInfo.push(storeArray.info);
}

this.setState({StoreInfo: storeInfo});


... generate html to be rendered


}


render(){

var renderPage = (

<div>
 {this.RenderTable(this.state.Zip, this.state.Radius)}
</div>

);

return renderPage;

}

这显然只是我的代码的一个示例,并不是确切的文件,因为原始文件长数千行。

回答如下:

请勿在render()上执行此操作。相反,您可以使用类中的钩子componentDidMount()来完成此操作,如下所示:

componentDidMount() {
if(this.state.StoreInfo.length === 0) {
//set your state here
}
}

在if语句中,您可以验证某些数据的长度以防止其进入渲染循环,而不必是状态内部某些信息数组的长度,而可以是标记您的代码的内容已经加载了信息。您也可以为此创建一个布尔值,并在加载数据时将其设置为true(或false)。

发布评论

评论列表 (0)

  1. 暂无评论