首页 > 解决方案 > Toggle Button onClick 不会改变我的 div 的位置

问题描述

所以我一直在关注本教程并翻译成反应,但我似乎无法让类名切换。

import React, { useState } from "react"
import styled from "styled-components"

const Navbar = () => {
  const [active, setActive] = useState("burger")

  const showSideBar = () => {
    setActive("nav-active")
  }
  return (
    <Wrapper>
      <div className="logo">Logo</div>
      <div className="nav">
        <ul className="nav-links">
          <li>Home</li>
          <li>About</li>
          <li>Nutrition</li>
          <li>Blog</li>
        </ul>
      </div>
      <div className={active} onClick={showSideBar} role="button">
        <div className="line1"></div>
        <div className="line2"></div>
        <div className="line3"></div>
      </div>
    </Wrapper>
  )
}

  const Wrapper = styled.nav`
  @import url("https://fonts.googleapis.com/css2?family=Poppins&display=swap");
  margin: 0px;
  box-sizing: border-box;
  display: flex;
  justify-content: space-around;
  min-height: 8vh;
  color: #2ec1ac;
  font-family: "Poppins", sans-serif;

  .logo {
    font-size: 30px;
    text-align: left;
  }
  .nav-links {
    display: flex;
    justify-content: space-around;
    text-decoration: none;
  }

  li {
    list-style: none;
  }
  .nav {
    width: 40%;
  }

  .line1,
  .line2,
  .line3 {
    width: 25px;
    height: 3px;
    background-color: #2ec1ac;
    margin: 5px;
  }
  .burger {
    margin-top: 10px;
    display: none;
  }

  @media screen and (max-width: 1024px) {
    .nav {
      width: 60%;
      font-size: 23px;
    }
  }

  @media screen and (max-width: 768px) {
    overflow-x: hidden;
    .nav {
      position: absolute;
      right: 0px;
      height: 120vh;
      top: 20vh;
      background-color: #2ec1ac;
      color: #fff;
      width: 50%;
      transform: translateX(100%);
      transition: transform 0.5s ease-in;
    }

    ul {
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: space-around;
    }
    li {
      padding: 10%;
      opacity: 0;
    }
    .burger {
      display: block;
    }

    .nav-active {
      nav {
        transform: translateX(100%);
      }
      li {
        opacity: 1;
      }
    }
  }

我只是想让一个侧边栏在单击时做出反应,它应该滑回视图,但即使类切换它仍然保持不变。我创建了一个函数,onClick 它更改了 div 的类名,但我似乎无法让它工作。`

标签: reactjsstyled-components

解决方案


className 应该已经在切换,但根据您的 CSS,看起来您应该将active状态放置为 a classNameto<div className="nav">而不是这个元素<div className={active} onClick={showSideBar} role="button">

<div className={`nav ${active}`}>
    <ul className="nav-links">
      <li>Home</li>
        ...

回到您的样式表,您依靠转换属性来移动导航,但无论它是否处于活动状态,您都保留在transform: translateX(100%);. 您需要在该值处于活动状态时对其进行更新

.nav-active {
  transform: translateX(0%);
}

推荐阅读