DEV Community

Francisco Villarreal
Francisco Villarreal

Posted on

como usar contextApi en react

En esta ocasión, exploraremos una funcionalidad que React nos ofrece para almacenar información y acceder a ella desde cualquier punto de nuestra aplicación. Esto nos ayuda a evitar un problema común conocido como "prop drilling", que ocurre cuando pasamos props a través de varios niveles de componentes. Esto puede resultar en que los componentes intermedios reciban props que no necesitan para su lógica, lo que puede forzar su renderización innecesaria y aumentar el costo de la aplicación.

Hoy nos enfocaremos en la utilidad de ContextAPI. Esta característica nos permite crear un estado global donde podemos almacenar información y hacer que esté disponible para cualquier componente a lo largo de la aplicación.

El primer paso para crear un estado global es establecer un contexto, lo cual se realiza de la siguiente manera:

interface IEstado {
  estado: string,
  setEstado: () => void
}

export const MiPrimirContext = createContext<IEstado>({
  estado: '',
  setEstado: () => {}
});

Enter fullscreen mode Exit fullscreen mode

En este código, creamos un contexto utilizando el método createContext. Le proporcionamos un objeto con dos propiedades: estado y setEstado, que serán los valores por defecto del estado global. Este contexto se asigna a la constante MiPrimerContext.

Una vez que hemos creado el contexto, el siguiente paso es crear un nuevo componente llamado MiPrimerProvider. Este componente será responsable de establecer el proveedor del contexto que creamos anteriormente.


export const MiPrimirProvider = ({children}: {children: ReactNode})=> {
  const [estado, setEstado] = useState('primier Estado')
  return (
    <MiPrimirContext.Provider value={{estado, setEstado}}>
      {children}
    </MiPrimirContext.Provider>
  )
}
Enter fullscreen mode Exit fullscreen mode

En este fragmento de código, observamos el uso del hook useState, el cual nos ayuda a gestionar el estado. Este componente actuará como un "HOC" (Componente de Orden Superior), lo que significa que cualquier componente anidado dentro de él tendrá acceso al estado definido.

import "./App.css";
import { MiPrimerProvider } from "./providers/MiPrimerProvider";
import Dashboard from "./components/dashboard";

function App() {
  return (
    <div className="relative">
      <MiPrimerProvider>
        <Dashboard />
      </MiPrimerProvider>
    </div>
  );
}

export default App;
Enter fullscreen mode Exit fullscreen mode

En este código de la aplicación principal (App), se utiliza el MiPrimerProvider para envolver el componente Dashboard, asegurando así que Dashboard y sus componentes hijos tengan acceso al estado global proporcionado por MiPrimerProvider.

import { useContext } from "react";
import { MiPrimirContext } from "../providers/MiPrimirContext";

export default function Dashboard() {
  const { estado, setEstado } = useContext(MiPrimirContext);

  return (
    <>
        {estado}
        <button onClick={()=> setEstado('update State')}> updateState</button>
    </>

  );

}
Enter fullscreen mode Exit fullscreen mode

Aquí podemos observar que el componente Dashboard está utilizando el contexto que creamos. Es tan simple como utilizar el hook useContext, pasándole como parámetro el contexto que creamos (MiPrimirContext). De esta manera, obtenemos acceso a los valores mantenidos por el contexto, que en este caso son estado y setEstado. Con esto, ya podemos hacer uso de ellos en nuestro componente.

Top comments (0)