1

For some reason the menu leave transition isn't working and I can't figure out why. I want the menu to move in from far bottom and then once isMenuOpen === false have menu exit back downwards.Hopefully someone is able to enlighten me xD

I deleted a bunch of stuff from App.jsx for the sake of easier reading, so no one has to riffle through a ton of code.

App > Header > Nav

App.jsx

import React, { useState } from 'react';
import { useTransition } from 'react-spring';
import './scss/app-styles.css';
import { Outlet } from 'react-router-dom';
import Login from './view/Login';
import SignUp from './view/SignUp';
import Header from './view/Header';
import Footer from './view/Footer';

const App = () => {
  const [isMenuOpen, setIsMenuOpen] = useState(false);
  // TEMP VALUE
  const [user] = useState(true);

  const animMenu = useTransition(isMenuOpen, {
    from: { opacity: 0, transform: 'translate3d(0, 1000%, 0)' },
    enter: { opacity: 1, transform: 'translate3d(0, 0, 0)' },
    leave: { opacity: 0, transform: 'translate3d(-100%, 0, 0)' },
  });

  return (
    <div className="App">
        <>
          <Header anim={animMenu} isMenuOpen={isMenuOpen} setIsMenuOpen={setIsMenuOpen}/>
          <Outlet />
          <Footer />
        </>
    </div>
  );
};

export default App;

Header.jsx

import React from 'react';
import './scss/header-styles.css';
import * as HiIcons from 'react-icons/hi';
import Nav from '../NavHam';

function Header({ anim, isMenuOpen, setIsMenuOpen }) {
  const handleToggle = () => {
    setIsMenuOpen(!isMenuOpen);
  };

  return (
    <header>
      <div className="nav-ham" onClick={handleToggle}>
        <HiIcons.HiMenu />
      </div>
      {anim((style, item) => {
        if (item) {
          return (
            <Nav toggle={handleToggle} isOpen={isMenuOpen} style={style} />
          );
        }
      })}
    </header>
  );
}

export default Header;

Nav.jsx

import React from 'react';
import { animated } from 'react-spring';
import './scss/nav-styles.css';

const Nav = ({ isOpen, style }) => {
  return (
    <>
      {isOpen ? (
        <animated.div className="menu" style={style}>
          <div>
            <a href="/">Home</a>
          </div>
          <div>
            <a href="/">About</a>
          </div>
          <div>
            <a href="/">Contact</a>
          </div>
          <div>
            <a href="/">Login</a>
          </div>
          <div>
            <a href="/">Sign Up</a>
          </div>
        </animated.div>
      ) : (
        ''
      )}
    </>
  );
};

export default Nav;

0 Answers0