按钮 onClick 在反应组件中仅工作一次

Posted

技术标签:

【中文标题】按钮 onClick 在反应组件中仅工作一次【英文标题】:button onClick works only once in react component 【发布时间】:2021-12-14 21:19:56 【问题描述】:

我正在从 API 获取数据并在父组件 UserList 中显示用户名,当我单击一个名称时,它会显示名为 UserDetails 的子组件。组件)。

UserDetail 组合包含一个按钮,单击该按钮会隐藏该组件,因此用户可以点击另一个用户的名称并查看他们的详细信息。我第一次选择用户并关闭窗口时它工作正常。但是当我再次点击第二个用户时,什么也没有发生。我需要刷新页面,让它再次正常工作。

我不明白问题出在哪里。我怀疑与 UserDetails 组件周围的三元运算符有关?还是与国家有关?我可以写 false 而不是 null 吗?

父组件:

const UserList = () => 
     
      const [users, setUsers] = useState([])
      const [selectedUser, setSelectedUser] = useState()
      const [showUser, setShowUser] = useState(true)
      
      const onHandleClick = () => setShowUser(false)
      
      useEffect(() => 
        fetch(URL)
          .then(res => res.json())
          .then(json => setUsers(json));
      , [])
    
      return (
        <>
          <header>      
            <h1>Users list</h1>
          </header>
          <section> 
            <ul>
              users.map(user => (
                <li key=user.id>
                  <button onClick =() => setSelectedUser(user)>user.name</button></li>
              ))         
            </ul>
    
            selectedUser && (
              <>
                showUser ?
                <UserDetail 
                  name=selectedUser.name 
                  username=selectedUser.username
                  email=selectedUser.email
                  address=selectedUser.address.street
                  phone=selectedUser.phone
                  company=selectedUser.company.name
                  onClick=onHandleClick
                />
                : false           
              </>
            )
              
          </section>
        </>
      )
    
    
    export default UserList

子组件:

const UserDetail = (name, username, email, address, phone, website, company, onClick) => 
 
  return (
    <>
      <DetailWindow>
        <h1>name</h1>
        <p>username</p>
        <p>email</p>
        <p>Adress:address</p>
        <p>phone</p>      
        <p>website</p>      
        <p>company</p>       
        <button onClick=onClick>X</button>
      </DetailWindow>
    </>
  )
  
const DetailWindow = styled.div`
  border: black solid 1px;
`

export default UserDetail

【问题讨论】:

【参考方案1】:

showUser 设置为false 后,您再也不会将其设置回true。当您映射用户以选择用户并显示用户时,我建议您使用 onClick -

onClick=() => setSelectedUser(user); setShowUser(true); 

在你的 return 之外声明这个函数可能是有意义的,因为它将是多行的。

【讨论】:

谢谢拉兹!我可能误解了你……但我在返回之外尝试了这个,就在 onHandleClick 下: const onClick = () => setSelectedUser(user); setShowUser(true); 然后这个在按钮里面,但我得到一个错误:'user' is not defined。

以上是关于按钮 onClick 在反应组件中仅工作一次的主要内容,如果未能解决你的问题,请参考以下文章

如何更改保存在反应组件的 useRef 对象中的按钮的 onClick 功能?

反应:移动(iPhone)上的onClick需要2次点击?

反应钩子第一次没有设置状态

反应中的开关状态不工作不止一次

按钮onclick无法在第一次单击时工作

我是新来的反应。我想在 React JS 中使用 onClick 事件使用单个状态呈现子组件