javascript - React hooks useState 不更新状态

标签 javascript reactjs typescript use-state

我的组件中有以下代码:我无法获取更新的状态。

当我调用 createUserList 时,我可以在 UserList 组件中看到用户,但在 UserComponet 中,当我登录用户时,我看不到那里的用户。

但我可以在 react 开发工具中看到更新的状态

我正在使用的代码:

function UserComponent() {
    const [users, setUsers] = useState<any>([])


  const register = () => {
    userAgent.delegate = {
      onMessage(message: Message) {
        let usernameList = message.event.entry
        if (message.event['@_category'] === 'activate') {
          createUserList(usernameList); 
        } else if (message.event['@_category'] === 'de-activate') {
          
          // empty user list but I can see users in react dev tools
          console.log(users)
          const username = message.event.entry
          removeUser(username)
        }
      }
    }
  }

  const createUserList = (usernameList: any) => {
    let userList: any = []
    usernameList.forEach((user: any) => {
      userList.push({'uri': user['@_uri'], 'name': user['@_uri'].substr(10, 8)})
    })

    // here I can see updated userList
    console.log(userList)
    setUsers(userList)
    setTimeout(() => {

      // users is empty here
      console.log(users)
    }, 5000)
  }

  return (
    <UserList users={users}/>
  )

}

function UserList({users}) {
    return (
        <div>
            {users.map((user) => <h2>user</h2>)}
        </div>
    )
}

最佳答案

您可以为此使用 useEffect 并将状态作为依赖项传递,因此每次用户状态发生更改时都会调用它。

useEffect(() => {
    console.log(users);
    }, [users])

关于javascript - React hooks useState 不更新状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67090057/

相关文章:

node.js - 如何使用 toJSON 更改序列化实体的属性名称?

javascript - Typescript 中的类型保护正在缩小到从不键入

javascript - 如何使用 Cypress 获取比 'Webpack Compilation Error' 更详细的信息?

javascript - jsPlumb - BeforeDetach 事件在 1.6.2 中未触发

javascript - 当组件在 View 中时在 react-spring 中启动动画

javascript - 如何将组件从数组传递到路由react-router-dom( typescript )

reactjs - 如何在react-redux中发出HTTP请求?

来自 php unix 时间戳的 javascript 日期

javascript - 如何使用 JavaScript 验证下拉列表中是否未选择任何内容

javascript - yarn /NPM : installing package versions that are compatible to certain dependency version