无法在渲染器中调用的方法内设置状态
我知道对于这个问题有很多答案,但是我觉得它们都不是我想要的。我的问题是我有此应用程序,该应用程序获取所需半径内的商店列表。单击提交时,将使用这些商店信息填充一个数组。我想做的就是能够以我的反应状态将某些信息存储到数组中。我的主要问题是,我想在填充该信息时设置状态,但这会导致无限循环,因为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)。