javascript - 我们使用哪些钩子来更新和删除反应?
问题描述
我是 React 的新手,我想询问更新/删除反应中的生命周期挂钩,因为当我在组件中删除时,它不会在我刷新页面之前被删除,但是当我componentDidUpdate
用来重新获取数据时,我的服务器会不断刷新一直以来,我用这个有错吗?当我重新获取数据时它正在工作componentDidUpdate
这是我的代码:
class App {
state = {
employee: []
};
async fetchData() {
try {
const { data } = await axios.get("http://localhost:4000/employee/list");
this.setState({ employee: data });
} catch (e) {
if (e) {
console.log(e);
}
}
}
componentDidMount() {
this.fetchData();
}
componentDidUpdate() {
this.fetchData();
}
delEmployee = async id => {
const url = `http://localhost:4000/employee/delete/${id}`;
try {
const { data } = await axios.delete(url);
this.setState(prev => {
return {
employee: [...this.state.employee.filter(el => el.id !== id)]
};
});
console.log(data);
} catch (e) {
if (e) {
console.log(e);
}
}
};
}
所以我在这里问最好使用 Hooks 进行更新吗?我可以使用componentDidUpdate
吗?
解决方案
不,componentDidUpdate 中的 this.fetchData 调用 setState 没有任何中断条件。这将导致你无限循环,如果你想使用 componentDidUpdate 添加一个条件
我会做这样的事情:
class App {
state = {
employee: []
};
async fetchData() {
try {
const { data } = await axios.get("http://localhost:4000/employee/list");
this.setState({ employee: data });
} catch (e) {
if (e) {
console.log(e);
}
}
}
componentDidMount() {
this.fetchData();
}
delEmployee = async id => {
const url = `http://localhost:4000/employee/delete/${id}`;
try {
await axios.delete(url);
await this.fetchData();
} catch(e) {
console.log(e);
}
};
}
推荐阅读
- java - 带有错误时间戳的 logback 日志记录
- c - 将结构保存到文本文件并将其下载回标准输出的 C 问题
- android - 如何在 android studio 中修复 Android manifest.xml 以启用索引?
- jquery - 选中复选框时在表单上添加一组单选按钮
- python-3.x - 使用 Spacy 训练 NER 从简历中提取技能。过渡中的 U-entity_name 是什么意思
- oracle - 触发值中的子查询
- identityserver4 - 在哪里存储客户端密码?
- solr - 如何在 Solr 中管理排名系统
- java - 使用 mockito 在 TestFx 中模拟 FileChooser
- python - 如何从图像中获取主色?