Reactjs 将流值设置为反应状态

Reactjs 将流值设置为反应状态,reactjs,rethinkdb,Reactjs,Rethinkdb,目前,我有一个示例应用程序,我尝试使用RejectDB和React 在数据库中,它们具有侦听订阅表中的更改(插入、更新、删除)的功能 当调用“feed”套接字事件时,它会将新创建的记录附加到状态。执行更新时,我想修改当前状态用户,但当我尝试记录值时,它仍然是空数组,但我想根据套接字事件响应返回的id修改特定记录 例如: 假设users的当前值在socket.emit('load')call之后处于状态: {id: "0e6dde2c-b21b-4963-9a06-393b04dfeb45", n

目前,我有一个示例应用程序,我尝试使用RejectDB和React

在数据库中,它们具有侦听订阅表中的更改(插入、更新、删除)的功能

当调用“feed”套接字事件时,它会将新创建的记录附加到状态。执行更新时,我想修改当前状态用户,但当我尝试记录值时,它仍然是空数组,但我想根据套接字事件响应返回的id修改特定记录

例如:

假设
users
的当前值在
socket.emit('load')
call之后处于状态:

{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]);
});
对于
用户
它返回
[]
,对于
结果
它返回
未定义
。我没有费心将
结果
附加到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]);
  });
});
响应
对象是流值


请帮帮我。谢谢

对象返回的是什么?返回
undefined
如果在给定谓词的数组中找不到任何内容。response返回以下内容:{id:“ff920ad9-fc1d-4034-a7e8-d96b502935d3”,name:“updated”}当使用array.find时,由于users数组为空,它将始终返回undefined。因此,最初,users数组为空。然后,向数组添加一个响应。如果另一个值来自流,您将看到users数组不是空的。它应该是如何工作的?老实说,我不明白问题出在哪里。好吧,我的问题是,在第一个套接字事件发出后,用户数组已经被填充,但当我尝试检查它的值时,它显示[],所以这可能就是为什么array.find不起作用的原因。@Gasim我再次尝试了setState的功能版本,它工作得很好。谢谢你的建议