css - React CSS 翻译转换不起作用

标签 css reactjs css-transitions

我正在尝试为侧面菜单设置动画,但由于某种原因它无法工作!

我读到一些答案,使用 map 来映射 <li> items 可能是问题所在(我尝试过仅使用一些带有静态文本的元素),但这似乎不是问题。

此外,我还将生成的元素放入状态,并用 useEffect 包装该集合以防止重新触发 map ,但仍然不起作用。只有转换不起作用,菜单出现在它必须出现的地方,当我单击菜单按钮时自行关闭,等等。

编辑:我认为值得一提的是,在我的开发服务器上处理它时,当我更新我的CSS文件(它不刷新页面)时,当我更改一些样式时使侧边栏移动,它随着动画移动,所以动画就在那里,只是当我单击打开/关闭按钮时它不起作用,但它立即出现。

附注uuid()为每个元素生成唯一的 key ,因此这也不是问题。

export default function SideBar({ names, closeSidebarOnClick, show }) {
  const [robots, setRobots] = useState();

  useEffect(() => {
    setRobots(GenerateNavItems());
  }, names);

  function GenerateNavItems() {
    return names.map((robotName) => {
      return (
        <li key={uuid()} className={`nav-item`} onClick={() => {closeSidebarOnClick();}}>
          {robotName}
        </li>
      );
    });
  }
      
  return (
    <nav className={`sidebar ${show ? "show-sidebar" : ""}`}>
      <ul>{robots}</ul>
    </nav>
  );
}

.nav-item {
  padding-left: 15px;
  text-decoration: none;
  font-weight: bold;
}

.nav-item:hover {
  color: red;
  cursor: pointer;
}

.toggle-sidebar-button {
  user-select: none;
  cursor: pointer;
  padding-left: 1.5rem;
  padding-top: 0.5rem;
  border: none;
  background: transparent;
  z-index: 300;
  /* z-index: 50; */
}

.toggle-sidebar-button:active {
  border: none;
}

.toggle-sidebar-button-line {
  width: 35px;
  height: 5px;
  background-color: black;
  margin: 6px 0;
}

.sidebar {
  height: 100%;
  position: fixed;
  top: 0;
  left: 0;
  width: 200px;
  z-index: 200;
  background-color: white;
  transform: translateX(-100%);
  transition: transform 1s ease;
}

.sidebar.show-sidebar {
  transform: translateX(0);
}

.sidebar ul {
  height: 100%;
  list-style: none;
  padding-left: 3rem;
  padding-top: 3rem;
  display: flex;
  flex-direction: column;
}
<div id="root">
  <div class="content row">
    <div class="toggle-sidebar-button">
      <div class="toggle-sidebar-button-line"></div>
      <div class="toggle-sidebar-button-line"></div>
      <div class="toggle-sidebar-button-line"></div>
    </div>
    <nav class="sidebar ">
      <ul>
        <li class="nav-item">ROBOT 1</li>
        <li class="nav-item">ROBOT 2</li>
      </ul>
    </nav>
    <div class="rendered-robot col">
      <div>CHOOSE ROBOT</div>
    </div>
  </div>
</div>

最佳答案

当您重新渲染导航组件时,过渡可能不可见。我建议您尝试这个实验 - 在 closeSidebarOnClickdont 中,不要让它重新渲染,只需使用 - document.getElementsByTagName('nav')[0].classList.add ('显示侧边栏');

有一种方法可以创建 React.createRef()useRef,如前所述 here但这同样不应该经常使用。

嗯,这可能是一个不好的做法,但是当涉及到 CSS 动画时,我们还有什么选择呢?我一直通过 redux 使用这些动画:) 我认为 dom 不能经常直接操作,但由于这是一个导航栏,并且整个应用程序中可能只有一个导航栏,所以这么多应该没问题。如果您发现让 CSS 动画正常工作的典型 React 方法,请告诉我。

关于css - React CSS 翻译转换不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63307633/

相关文章:

javascript - 如何将 onChange 事件绑定(bind)到导入类中的函数?

reactjs - 更改 MUI 中的 Appbar 背景颜色

jquery - 将 div 定位到顶部

css - Typekit 在 IE8 中不工作

javascript - 为什么这个旋转横幅的导航按钮不起作用?

css - 如何为 helperText Material ui 分配颜色以突出显示 TextField 中的错误

jquery - CSS transitionEnd 事件仍在监听完成的过渡

css - 如何在使用 CSS 完成悬停后淡出

css - 访问过的链接有不需要的文字修饰

html - 仅使用 CSS 调整其中一个 Div 的高度