Logo Hpv 4 Learning
Academy
Web Agency
react

Usare useContext per aprire una Sidebar

By Hpv4Learning 2 min25/04/2021
"creeremo un context e useremo lo useContext per aprire e chiudere una Sidebar"
Sidebar

Troverai nel progetto

Che cosa realizzeremo in questo progetto ?

In questa applicazione creeremo un context e useremo lo useContext per aprire e chiudere una Sidebar. In questo modo potremmo passare props e state tra componenti che non sono direttamente correlati.

Di che cosa avremmo bisogno ?

  • useState: Ci servirà uno state per controllare che la nostra sidebar sia aperta o chiusa.
  const [isSidebarOpen, setIsSidebarOpen] = useState(false);
  • createContext: Una funzione che permette di creare un context
  • useContext: Hook che permette di utilizzare un context ed accedervi ai valori.

Come creare un context in React ?

Per creare un context si utilizza la funzione React.createContext che ci ritornerà un Context.Provider e un Context.Consumer. Come possiamo dedurre dai nomi uno "provvederà" i valori e l'altro sarà il "consumatore finale"

const AppContext = React.createContext();

Creiamo ora il nostro Provider

const AppProvider = ({ children }) => {
  const [isSidebarOpen, setIsSidebarOpen] = useState(false);
  return (
    <AppContext.Provider
      value={}
    >
      {children}
    </AppContext.Provider>
  );
};

All'interno della props value possiamo passare tutti i valori, funzioni, state che vogliamo siano accessibili da altri componenti che saranno i Consumer rispetto al nostro Provider.

const AppProvider = ({ children }) => {
  //..state

  const openSidebar = () => setIsSidebarOpen(true);
  const closeSidebar = () => setIsSidebarOpen(false);

  return (
    <AppContext.Provider
      value={{
        isSidebarOpen,
        openSidebar,
        closeSidebar,
      }}
    >
      {children}
    </AppContext.Provider>
  );
};

Come accedere ai valori del Context

Il nostro provider è pronto, ora non ci rimane che definire quali componenti portanno accedervi e in essi accedere ai valori del context.

Per prima cosa esportiamo il nostro AppProvider

export {AppProvider} 

ed importiamolo nel nostro index.js. Il nostro AppProvider components accetto come parametro children e come children passeremo tutta la nostra App.

import React from "react";
import { createRoot } from "react-dom/client";
import "./index.css";
import App from "./App";
import { AppProvider } from "./context";
const root = createRoot(document.getElementById("root"));
root.render(
  <React.StrictMode>
    <AppProvider>
      <App />
    </AppProvider>
  </React.StrictMode>
);

In questo modo tutti i nostri children del nostro provider potranno accedere ai valori del nostro Provider

Come usare useContext Hook

useContext è l'hook che si usa per accedere e consumare un context. Il miglior modo di usarlo è quello di creare un customHook che ritorni direattamente i valori del context.

Per fare questo nel nostro file con il nostro AppProvider andiamo a creare un customHook che poi esporteremo insieme al nostro provider.

const useGlobalContext = () => {
  return useContext(AppContext);
};

export { AppProvider, useGlobalContext };

Dopo andiamo nella nostra Navbar e utilizziamo il nostro hook per importare il la funzione per aprire la nostra sidebar.

//...other imports
import { useGlobalContext } from "./context";

const Navbar = () => {
  const { openSidebar } = useGlobalContext();
//...JSX

E nella nostra Sidebar invece la funzione per chiudere la Sidebar e lo state per controllare che sia aperta.

//...other imports
import { useGlobalContext } from "./context";
const Sidebar = () => {
  const { isSidebarOpen, closeSidebar } = useGlobalContext();
  //...JSX

Prossimo Progetto

Come gestire un carrello in React e useReducer

Come gestire un carrello in React e useReducer

Gestiamo il carrello di un e-commerce con useContext e useReducer

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...