javascript - 数据库更改时在 React 中重新渲染组件
问题描述
我正在创建一个组件,它基本上是一个呈现为表格的公寓容器。我将一系列公寓保存为国有财产“公寓”。表格的每一行也有一个按钮,该按钮应该通过调用外部 API 从数据库中删除该行。一切正常,除了......!每次有人在数据库中创建记录(这是由我的 React 应用程序的另一个组件完成的)时,有什么方法可以重新渲染这个组件(公寓列表)?
每次数据库更改时重新渲染组件是否正确?
案例 1)我打开浏览器,我可以看到项目列表。用户更改数据库并且此项目列表实时更改,我可以看到项目是如何从数据库中创建和删除的。
案例2)我打开浏览器,我可以再次看到项目列表,我面前没有任何变化。现在,其他人从我的列表中删除了项目,我不知道。我单击此项目,但该项目不再在数据库中。该怎么办?
那么,对这个用例最好的态度是什么?在这里,您可以看到我的 Aparatments 组件代码。
import React, { Component } from 'react';
import axios from "axios";
export default class FlatsLayout extends Component {
constructor(props) {
super(props);
this.state = {
flats: []
}
}
componentDidMount() {
axios.get("http://192.168.0.14:4000/flats")
.then(res => {
this.setState({flats: res.data});
console.log(res.data);
});
}
onDeleteFlat(flatID, e) {
axios.delete("http://192.168.0.14:4000/flats/" + flatID).then( res => {
console.log(res.data);
});
const data = this.state.flats.filter(flat => flat._id !== flatID);
this.setState({
flats: data
});
}
render() {
return (
<div>
<h2>Flats</h2>
<table className="table table-striped table-bordered">
<tbody>
{
this.state.flats.map( flat => {
return (
<tr key={flat._id}>
...
<td><a href={flat.URL}>link</a></td>
<td>
<button
type="Button"
className="btn btn-sm btn-danger"
onClick={ (e) => this.onDeleteFlat(flat._id, e)}
>
Remove
</button>
</td>
</tr>
)
})
}
</tbody>
</table>
</div>
)
}
}
解决方案
有多种方法可以实现这一点:
- 反应式数据库连接,例如 Firebase ( https://firebase.googleblog.com/2014/05/using-firebase-with-reactjs.html )
- Websockets - 当公寓数据发生变化时,服务器向每个连接的客户端发送消息。
- 轮询服务器以获取更新
推荐阅读
- javascript - Expo v39 AppAuth 无法从 azure 获取正确的 accessToken
- c++ - 带有类方法的 C++ 未解析的外部
- unity3d - 从 AWS 服务器上传/下载 IFC 模型到我们的 Unity 应用程序
- pagespeed - The same indicators of the PAGE SPEED API
- php - Symfony 4.4。捆绑安装后运行迁移
- python - Hypothesis.strategies 从日期生成字符串
- css - 如何自定义引导 css
- python - 如何清理 python 中的标准输入以修复 sonarqube 问题
- python - 每 2 秒运行一次 python
- junit - 赛普拉斯 JUnit 报告:缺少“跳过”和“错误”属性