javascript - 当我将 ccomponentDidUpdate 与 axios 一起使用时,我无法停止反应 js 中的循环
问题描述
当我使用 axios 进行 componentDidUpdate 并更新状态时,我得到了无限循环。因此,我创建了一个下面的简单组件,但发生了无限循环。
这是我的代码源:
import React,{Component} from 'react';
import axios from 'axios';
import HeaderItem from './HeaderItem';
import {BrowserRouter as Router} from "react-router-dom";
class categorie extends React.Component{
state={
content:[]
}
componentDidMount()
{
this.getContent();
}
componentDidUpdate(prevProps,prevState){
if(this.state.content!==prevState.content)
{
this.getContent();
}
}
getContent=()=>{
axios.get(`http://localhost:3000/article?categorie=${this.props.match.params.id}`).then((res)=>{
this.setState({
content:res.data.filter(data=>data.categorie==this.props.match.params.id)
})
})
}
render(){
return (
<div>
<div className="container">
<div className="row">
{this.state.content.map(data=>(
<h1>{data.title}</h1>
))}
</div>
</div>
</div>
);
}
}
export default categorie;
解决方案
如果您的数据以数组形式出现,那么您的条件将始终为真,这将使您的函数始终有效
[1, 2] !== [1, 2] // true
您可以通过对两个数组的内容进行字符串化来比较两个数组并进行比较:
您需要json.stringify
用于比较数组的对象
或者您可以使用lodash ._isEqual
进行比较。
我建议:使用反应钩子useEffect
并更改为功能组件。
推荐阅读
- android - 原因:java.lang.IllegalStateException:没有为此提供程序指定值
- database - 由子查询返回
- java - 为什么uDig的渲染图比我的好看很多
- javascript - 如何更改此方法的控制通量变量
- python - Python - 日期标记文本文件的每一行
- angular - mat-tree 遇到 css 网格
- blueprism - selectContextMenuItem 方法返回“该方法的参数无效”
- ruby - 一段时间后,使用 slack-ruby-bot gem 从 slack bot 获得多个答案
- reactjs - appendchild 一个 React 组件消息
- php - 删除表单元素的表单更新时实体关系设置为空