Javascript React Native-运行和应用程序后应用程序崩溃;“设置间隔”;
我来这里是想问一个我一天都解决不了的问题 应用setInterval后,我的应用程序在物理android手机上崩溃,在我的模拟器中显示了一个我不熟悉的错误 在物理android手机和模拟器中,当我登录应用程序并在特定页面/屏幕上停留一分钟后,它将崩溃或显示错误 这是我的密码Javascript React Native-运行和应用程序后应用程序崩溃;“设置间隔”;,javascript,android,reactjs,react-native,setinterval,Javascript,Android,Reactjs,React Native,Setinterval,我来这里是想问一个我一天都解决不了的问题 应用setInterval后,我的应用程序在物理android手机上崩溃,在我的模拟器中显示了一个我不熟悉的错误 在物理android手机和模拟器中,当我登录应用程序并在特定页面/屏幕上停留一分钟后,它将崩溃或显示错误 这是我的密码 export default class tables extends Component { constructor(props){ super(props) this.state
export default class tables extends Component {
constructor(props){
super(props)
this.state = {
data: [],
....
}
}
fetchData = async () => {
const response = await fetch('http://192.168.254.***:****/table');
const json = await response.json();
this.setState({ data: json });
}
componentDidMount = () => {
this.Set_int = setInterval(() => {
this.fetchData().then(() => {
this.setState({ isLoading: false })
});
}, 5000);
}
componentWillUnmount = () => {
clearInterval(this.Set_int);
}
render() {
return (
<View>
....
.......
</View>
)
}
}
导出默认类表扩展组件{
建造师(道具){
超级(道具)
此.state={
数据:[],
....
}
}
fetchData=async()=>{
const response=等待获取('http://192.168.254.***:***/table');
const json=await response.json();
this.setState({data:json});
}
componentDidMount=()=>{
this.Set_int=setInterval(()=>{
this.fetchData()。然后(()=>{
this.setState({isLoading:false})
});
}, 5000);
}
组件将卸载=()=>{
clearInterval(此.Set_int);
}
render(){
返回(
....
.......
)
}
}
以下是错误:
My console.log:
服务器日志中的2693896可能指的是响应长度,而解析为对象的2.6MB JSON响应可能会占用大量RAM。每5秒请求一次数据,无论上一次请求是否完成。如果客户端或服务器不能以这种速度处理数据,请求和状态更新将累积并占用所有可用RAM
setInterval
通常不应与承诺一起使用,因为它忽略了承诺链
为了改善这种情况,应仅在状态更新完成时安排新的间隔,或者在应保留5s间隔的情况下,可使用取消请求。服务器日志中的2693896可能指响应长度,解析为对象的2.6MB JSON响应可能会占用大量RAM。每5秒请求一次数据,无论上一次请求是否完成。如果客户端或服务器不能以这种速度处理数据,请求和状态更新将累积并占用所有可用RAM
setInterval
通常不应与承诺一起使用,因为它忽略了承诺链
为了改善这种情况,应该只在状态更新完成时安排一个新的间隔,或者在需要保留5个间隔的情况下,可以使用取消请求。
componentDidMount
可以是类上的常规方法,不必是类字段箭头函数,componentDidMount()
。与componentWillUnmount
相同,但您希望改用componentdidumount
。componentDidMount
可以是类上的常规方法,无需是类字段箭头函数,componentDidMount()
。与componentWillUnmount
相同,但您希望改用componentdidumount
。