En navigasjonsmeny i sidefeltet består vanligvis av en vertikal liste med lenker. Du kan opprette et sett med lenker i React ved å bruke react-router-dom.

Følg disse trinnene for å lage en React-sidenavigasjonsmeny med lenker som inneholder materielle UI-ikoner. Linkene vil gjengi forskjellige sider når du klikker på dem.

Opprette en React-applikasjon

Hvis du allerede har en Reager prosjekt, gå gjerne videre til neste trinn.

Du kan bruke kommandoen create-react-app for å komme raskt i gang med React. Den installerer alle avhengigheter og konfigurasjon for deg.

Kjør følgende kommando for å lage et React-prosjekt kalt react-sidenav.

npx skape-react-app react-sidenav

Dette vil opprette en react-sidenav-mappe med noen filer for å komme i gang. For å rydde opp i denne mappen litt, naviger til src-mappen og erstatt innholdet i App.js med dette:

import './App.css';

funksjonApp() {
komme tilbake (
<div klassenavn="App"></div>
);
}

eksportmisligholde App;

Opprette navigasjonskomponenten

Navigasjonskomponenten du skal lage vil se slik ut:

instagram viewer

Det er ganske enkelt, men når du er ferdig, bør du kunne endre det slik at det passer dine behov. Du kan skjule navigasjonskomponenten ved å bruke dobbeltpilikonet øverst:

Start med å lage den ikke-skjulte visningen. Bortsett fra pilikonet, inneholder sidefeltet en liste over elementer. Hvert av disse elementene har et ikon og litt tekst. I stedet for gjentatte ganger å lage et element for hvert element, kan du lagre dataene for hvert element i en matrise og deretter iterere over det ved hjelp av en kartfunksjon.

For å demonstrere, lag en ny mappe kalt lib og legg til en ny fil kalt navData.js.

import HjemIkon fra '@mui/icons-material/Home';
import TravelExploreIcon fra '@mui/icons-material/TravelExplore';
import BarChartIcon fra '@mui/icons-material/BarChart';
import Innstillinger-ikon fra '@mui/icons-material/Innstillinger';

eksportkonst navData = [
{
id: 0,
ikon: <HomeIcon/>,
tekst: "Hjem",
link: "/"
},
{
id: 1,
ikon: <TravelExploreIcon/>,
tekst: "Utforske",
link: "utforske"
},
{
id: 2,
ikon: <BarChartIcon/>,
tekst: "Statistikk",
link: "statistikk"
},
{
id: 3,
ikon: <InnstillingerIkon/>,
tekst: "Innstillinger",
link: "innstillinger"
}
]

Ikonene som brukes ovenfor er fra Material UI-biblioteket, så installer det først ved å bruke denne kommandoen:

npm installere @mui/material @følelse/react @følelse/styled
npm installere @mui/icons-material

Deretter oppretter du en mappe som heter Komponenter og legg til en ny komponent kalt Sidenav.js.

I denne filen, importer navData fra ../lib og lag skjelettet for Sidenav funksjon:

// I Sidenav.js
import { navData } fra "../lib/navData";
eksportmisligholdefunksjonSidenav() {
komme tilbake (
<div>
</div>
)
}

For å lage koblingene, endre div-elementet i denne komponenten til dette:

<div>
<button className={styles.menuBtn}>
<KeyboardDouble ArrowLeftIcon />
</button>
{navData.map (element =>{
komme tilbake <div key={item.id} className={styles.sideitem}>
{item.icon}
<span className={styles.linkText}>{item.text}</span>
</div>
})}
</div>

Denne komponenten lager en navigasjonslenke som inneholder ikonet og lenketeksten for hver iterasjon i kartfunksjonen.

Knappeelementet holder venstre pilikon fra Material UI-biblioteket. Importer den øverst i komponenten ved å bruke denne koden.

import KeyboardDouble ArrowLeftIcon fra '@mui/icons-material/KeyboardDoubleArrowLeft';

Du har kanskje også lagt merke til at klassenavnene refererer til et stilobjekt. Dette er fordi denne opplæringen bruker CSS-moduler. CSS-moduler lar deg lage stiler med lokalt omfang i React. Du trenger ikke å installere eller konfigurere noe hvis du brukte create-react-app for å starte dette prosjektet.

I Components-mappen oppretter du en ny fil som heter sidenav.module.css og legg til følgende:

.sidenav {
bredde: 250px;
overgang: bredde 0.3slette inn-ut;
høyde: 100vh;
bakgrunnsfarge: rgb (10,25,41);
polstring-topp: 28px;
}

.sidenavStengt {
komponerer: sidenav;
overgang: bredde 0.3slette inn-ut;
bredde: 60px
}

.sideelement {
display: flex;
align-items: center;
polstring: 10px 20px;
markør: peker;
farge: #B2BAC2;
tekst-dekorasjon: ingen;
}

.linkText {
polstring-venstre: 16px;
}

.linkTextClosed {
komponerer: linkText;
synlighet: skjult;
}

.sideelement:sveve {
bakgrunnsfarge: #244f7d1c;
}

.menuBtn {
tilpasse-selv-: senter;
justere-selv: bøye-start;
rettferdiggjøre-selv: bøye-slutt;
farge: #B2BAC2;
bakgrunnsfarge: gjennomsiktig;
grense: ingen;
markør: peker;
polstring-venstre: 20px;
}

Sette opp React Router

div-elementene som returneres av kartfunksjonen skal være lenker. I React kan du lage lenker og ruter ved å bruke react-router-dom.

I terminalen, installer react-router-dom via npm.

npm installer react-router-dom@siste

Denne kommandoen installerer den nyeste versjonen av react-router-dom.

I Index.js, pakk inn app-komponenten med ruteren.

import Reagere fra 'reagere';
import ReactDOM fra 'reager-dom/klient';
import App fra './App';
import { BrowserRouter } fra 'reager-ruter-dom';
konst root = ReactDOM.createRoot(dokument.getElementById('root'));

rot.render(
<Reagere. StrictMode>
<Nettleserruter>
<App />
</BrowserRouter>
</React.StrictMode>
);

Deretter legger du til rutene dine i App.js.

import {
Nettleserruter,
Ruter,
Rute,
} fra "reager-ruter-dom";

import './App.css';
import Sidenav fra './Components/Sidenav';
import Utforske fra "./Pages/Explore";
import Hjem fra "./Sider/Hjem";
import Innstillinger fra "./Sider/Innstillinger";
import Statistikk fra "./Pages/Statistics";

funksjonApp() {
komme tilbake (
<div klassenavn="App">
<Sidenav/>
<hoved->
<Ruter>
<Rutebane="/" element={<Hjem />}/>
<Rutebane="/explore" element={<Utforsk />} />
<Rutebane="/statistics" element={<Statistikk />}/>
<Rutebane="/settings" element={<Innstillinger />} />
</Routes>
</main>
</div>
);
}
eksportmisligholde App;

Endre App.css med disse stilene.

kropp {
margin: 0;
polstring: 0;
}

.App {
display: flex;
}

hoved {
polstring: 10px;
}

Hver rute returnerer en annen side avhengig av URL-en som sendes til sti rekvisitter. Opprett en ny mappe kalt Sider og legg til fire komponenter – Hjem, Utforsk, Statistikk og Innstillinger-siden. Her er et eksempel:

eksportmisligholdefunksjonHjem() {
komme tilbake (
<div>Hjem</div>
)
}

Hvis du besøker /hjemmebanen, bør du se "Hjem".

Linkene i sidefeltet skal føre til den samsvarende siden når du klikker på dem. I Sidenav.js, endre kartfunksjonen for å bruke NavLink-komponenten fra react-router-dom i stedet for div-elementet.

{navData.map (element => {
komme tilbake <NavLink key={item.id} className={styles.sideitem} til={item.link}>
{item.icon}
<span className={styles.linkText}>{item.text}</span>
</NavLink>
})}

Husk å importere NavLink øverst i filen.

import { NavLink } fra "reager-ruter-dom";

NavLink mottar URL-banen for lenken gjennom til prop.

Frem til dette punktet er navigasjonslinjen åpen. For å gjøre det sammenleggbart kan du bytte bredde ved å endre CSS-klassen når en bruker klikker på pilknappen. Du kan deretter endre CSS-klassen igjen for å åpne den.

For å oppnå denne vekslingsfunksjonaliteten, må du vite når sidefeltet er åpent og lukket.

For dette, bruk useState-kroken. Dette Reagerkrok lar deg legge til og spore tilstanden i en funksjonell komponent.

I sideNav.js oppretter du kroken for åpen tilstand.

konst [open, setopen] = useState(ekte)

Initialiser åpen tilstand til sann, slik at sidefeltet alltid vil være åpent når du starter programmet.

Deretter oppretter du funksjonen som vil veksle mellom denne tilstanden.

konst toggleOpen = () => {
setopen(!open)
}

Du kan nå bruke den åpne verdien til å lage dynamiske CSS-klasser som dette:

<div klassenavn={åpen? styles.sidenav: styles.sidenavClosed}>
<button className={styles.menuBtn} onClick={toggleOpen}>
{åpen? <KeyboardDouble ArrowLeftIcon />: <KeyboardDouble ArrowRightIcon />}
</button>
{navData.map (element =>{
komme tilbake <NavLink key={item.id} className={styles.sideitem} til={item.link}>
{item.icon}
<span className={åpen? styles.linkText: styles.linkTextClosed}>{item.text}</span>
</NavLink>
})}
</div>

CSS-klassenavnene som brukes vil bli bestemt av den åpne tilstanden. For eksempel, hvis open er sant, vil det ytre div-elementet ha et sidenav-klassenavn. Ellers vil klassen være sidenavStengt.

Dette er det samme for ikonet, som endres til høyre pilikon når du lukker sidefeltet.

Husk å importere den.

import KeyboardDouble ArrowRightIcon fra '@mui/icons-material/KeyboardDoubleArrowRight';

Sidepanelkomponenten er nå sammenleggbar.

Hent hele koden fra denne GitHub-depot og prøv selv.

Styling React-komponenter

React gjør det enkelt å bygge en sammenleggbar navigasjonskomponent. Du kan bruke noen av verktøyene som React gir som react-router-dom for å håndtere ruting og kroker for å holde styr på den kollapsede tilstanden.

Du kan også bruke CSS-moduler til å style komponenter, selv om du ikke trenger det. Bruk dem til å lage lokalt omfangsklasser som er unike og som du kan riste fra pakkefilene hvis de ikke er i bruk.