Logo Hpv 4 Learning
Academy
Web Agency
react

Come realizzare un dropdown in React

By Hpv4Learning 1 min25/04/2021
"useRef restituisce un oggetto la cui proprietà .current è inizializzata e persisterà per l'intera durata del componente."
Navbar

Troverai nel progetto

Che cosa realizzeremo in questo progetto ?

Partiremo creando una normale navbar full responsive che da mobile mostrerà i link navigabili all'interno di un dropdown menù, ovvero un menu collassabile.

Di che cosa avremmo bisogno ?

  • useState: useremo un solo state per tenere traccia dell'aperture e della chiusura del nostro dropdown.
  const [show, setShow] = useState(false);
  • useRef: Ci permetterà di targettizzare il nostro menù ed il suo container e di gestire le proprietà del nostro dropdown in modo dinamico dinamico.
  const linkContainerRef = useRef(null);
  const linkListRef = useRef(null);

-useEffect: Lo useremo per aprire e chiudere il nostro dropdown

Che cosa è lo useRef Hook

useRef restituisce un oggetto mutabile la cui proprietà .current è inizializzata sull'argomento passato (initialValue). L'oggetto restituito persisterà per l'intera durata del componente.

Quindi non ci resta che assegnare far "assegnare" i nostri oggetti ref:

 <div
        className={`${show ? "links-container show" : "links-container"}`}
        ref={linkContainerRef}
      >
        <ul className="nav-links" ref={linkListRef}>
          {links.map((el) => (
            <li key={el.id}>
              <a href={el.url} alt={el.text}>
                {el.text}
              </a>
            </li>
          ))}
        </ul>
      </div>

Esempio di utilizzo dello useRef Hook

Abbiamo visto che il nostro useRef ritorna un oggetto nel quale alla chiave current troviamo l'Element del DOM del componente al quale abbiamo passato il nostro ref.

Nel nostro case abbiamo due useRef, uno per il container della nostra nav-links e l'altro per la nostra nav-links. Il nostro obiettivo è quello di definire l'altezza del container in modo che sia dinamica rispetto al numero di elementi presenti in nav-links.

 useEffect(() => {
    const linkListHeight = linkListRef.current.getBoundingClientRect().height;
    if (show) {
      linkContainerRef.current.style.height = `${linkListHeight}px`;
    } else {
      linkContainerRef.current.style.height = "0px";
    }
  }, [show]);

Quando lo state di show, che sarà modificato al click dell'elemento che vogliamo che apra il nostro menu, andremo a prendere l'altezza della nostra lista di link andremo a settarla sul nostro container.

Prossimo Progetto

Usare useContext per aprire una Sidebar

Usare useContext per aprire una Sidebar

Utilizziamo React per aprire e chiudere un Sidebar di navigazione

react

Informazioni aggiuntive

Livello: Principiante

225 lezioni

25 ore di videocorso

11 Progetti pratici

3052 studenti iscritti

Voto Medio:

4.5

Prezzo originale: 29.99€

Supporto Premium

text

Scopri il corso completo

React.js e Redux in Italiano: Te...


3052

4.5

Copertina
React.js e Redux in Italian...