reactjs - React 按钮 onClick 需要两次单击才能第二次工作

标签 reactjs

当按下 img 时,侧面菜单可以正常打开,但是当我关闭侧面菜单并尝试通过按下 img 再次打开它时,需要单击两次才能打开。我该如何做到这一点,即使在我打开和关闭侧面菜单后,它也可以一键运行?

const Header = () => {
  let [isOpen, setIsOpen] = useState(false);
  return (
    <header className='homepage-header'>
        <img src={menusvg} alt='' onClick={() => setIsOpen((isOpen) => !isOpen)} />
        {
            isOpen ? <SideMenu /> : null
        }
        <h1>Main Header</h1>
    </header>
  )
}

注意:我在 SideMenu 组件内有另一个用于关闭菜单的按钮。

侧边菜单:

function SideMenu() {
  let [isOpen, setIsOpen] = useState(true);
  return (
    <>
        {
            isOpen ? <div className='side-menu'>
                <p>side menue</p>
                <i class="fas fa-times" onClick={() => setIsOpen((isOpen) => !isOpen)}></i>
            </div>
                : null
        }
    </>
  )
}

最佳答案

您正在使用两种不同的状态,将 isOpensetIsOpen 作为 props 传递给 SideMenu

试试这个代码

function SideMenu({ isOpen, setIsOpen }) {
  return (
    <>
      {isOpen ? (
        <div className="side-menu">
          <p>side menue</p>
          <button onClick={() => setIsOpen(isOpen => !isOpen)}>Close</button>
        </div>
      ) : null}
    </>
  );
}

--

export default function App() {
  let [isOpen, setIsOpen] = React.useState(false);
  return (
      <header className="homepage-header">
        <img
          src={'https://picsum.photos/200'}
          alt=""
          onClick={() => setIsOpen(isOpen => !isOpen)}
        />
        {isOpen ? <SideMenu isOpen={isOpen} setIsOpen={setIsOpen} /> : null}
        <h1>Main Header</h1>
      </header>
  );
}

示例代码:https://stackblitz.com/edit/react-j4rxot?file=src%2FApp.js

关于reactjs - React 按钮 onClick 需要两次单击才能第二次工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68070331/

相关文章:

reactjs - 使用 Remix 嵌入 GitHub Gist

javascript - Context Api 状态没有改变

javascript - 当 React Native(android) 中的 Multiline={true} 时,onSubmitEditing 不适用于 TextInput

javascript - 单元测试 Redux 操作 - Thunk Undefined

javascript - React 中将子组件的值传递给父组件

javascript - 在用户导航之前 react : Restore scroll position/Calling history. Replace()

javascript - 如何在 Reactjs 的 react-router-dom 版本 5 中使用重定向

reactjs - React-router:嵌套路由如何工作?

reactjs - 将渲染 Prop 添加到功能性 React 子组件中

javascript - Jest - 创建 React 应用程序 - Axios : test get mocked