reactjs - 将流式值设置为 React 状态
问题描述
目前我有一个示例应用程序,我尝试在其中使用 RethinkDB 和 React。
在 RethinkDB 中,他们有changefeed监听订阅表中的更改(插入、更新、删除)。
当调用“feed”套接字事件时,它会将新创建的记录附加到状态。执行更新时,我想修改当前状态用户,但是当我尝试记录值时,它仍然是空数组,但我想根据套接字事件响应返回的 id 修改特定记录。
例子:
假设调用users
后 state的当前值:socket.emit('load')
{id: "0e6dde2c-b21b-4963-9a06-393b04dfeb45", name: "updaste."} App.js:28
{id: "106682b4-1395-4f8a-9758-5dd1d73b4174", name: "test1xx"} App.js:28
{id: "60b7c8cf-b40f-4209-a7ef-ff51735ae7c5", name: "William Adama", posts: Array(3), tv_show: "Battlestar Galactica"} App.js:28
{id: "ff920ad9-fc1d-4034-a7e8-d96b502935d3", name: "tesst"} App.js:28
现在在后端我更新了记录:ff920ad9-fc1d-4034-a7e8-d96b502935d3,socket.on('feed')
将返回
{id: "ff920ad9-fc1d-4034-a7e8-d96b502935d3", name: "updated"}
我想更新users
状态中的数组元素,所以我这样做了。
ws.on("feed", response => {
console.log(response);
const prevUser = [...users]
let result = prevUser.find(t => t.id === response.id)
if (result) {
result.name = response.name
}
setUsers(user => [...user, response]);
});
它返回[]
forusers
和undefined
for result
。我没有费心将它附加result
到 setUsers ,因为它无论如何都是未定义的。
完整片段:
const [users, setUsers] = useState([]);
useEffect(() => {
ws.on("connect", () => {
console.log("connected");
ws.emit("load"); // server will emit the "feed" message
console.log(`emitted`);
});
// will be called when "load" message was emitted
ws.on("feed", response => {
console.log(response);
const prevUser = [...users];
let result = prevUser.find(t => t.id === response.id);
if (result) {
result.name = response.name;
}
console.log(result);
setUsers(user => [...user, response]);
});
});
该response
对象是流值。
请帮我。谢谢
解决方案
推荐阅读
- gpu - 为什么 Metal 编译这个递归函数?
- css - Bootstrap 切换子菜单 flex 列在显示时从行到列出现故障
- android - hashmap kotlin 中的空数据
- python - ImportError:无法从“werkzeug”导入名称“FileStorage”
- python - React Django CORS 不工作:已被 CORS 策略阻止
- python - 检查熊猫数据框中的单元格是否包含列表中的元素
- sql-server - 读取大 Excel 文件时收到“存储空间不足”错误
- r - Ggplot2中最佳拟合曲线的Y坐标
- google-apps-script - 通过 API 生成的 GoogleSheet 未执行 onChange 脚本
- wordpress - Wordpress 上的 Google Place ID