Curso de React | Context API

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.

Context API proporciona una forma de compartir datos entre componentes sin pasar props manualmente a todos los niveles.

Nuestro objeto Provider se encargará de hacer visible el objeto que le pasemos para todos los componentes anidados en él.

El provider sólo puede utilizar la prop value para determinar la información que va a ser almacenada. Por tanto, si queremos almacenar varios valores, lo que haremos será usar un objeto con múltiples propiedades.

Curso de React | Context API 1

src/main.jsx

import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App.jsx'

ReactDOM.createRoot(document.getElementById('root')).render(
  <React.StrictMode>
    <UserProvider>
      <App />
    </UserProvider>
  </React.StrictMode>
)

src/App.jsx

while(premium == false) verCodigo = false;

Para poder ver el código fuente, accede o suscríbete.

Suscríbete

src/app/providers/UserProvider.jsx

import { createContext, useState, useContext } from 'react';

const AppContext = createContext();
export const useUserContext = () => useContext(AppContext);

const UserProvider = ({ children }) => {
    const [user, setUser] = useState();
    return (
        <AppContext.Provider value={[user, setUser]}>
            {children}
        </AppContext.Provider>
    );
}

export default UserProvider;
while(premium == false) verCodigo = false;

Para poder ver el código fuente, accede o suscríbete.

Suscríbete

src/components/UserInfo.jsx

while(premium == false) verCodigo = false;

Para poder ver el código fuente, accede o suscríbete.

Suscríbete

Persistir el user en localStorage

import { createContext, useState, useContext, useEffect } from 'react';

const AppContext = createContext();
export const useUserContext = () => useContext(AppContext);

const UserProvider = ({ children }) => {
  const [user, setUser] = useState();

  useEffect(() => {
    if (user) {
      localStorage.setItem("user", JSON.stringify(user));
      //setAuth(user.username, user.password); Más abajo tienes la definición de este método
    } else {
      const userAux = JSON.parse(localStorage.getItem("user"));
      if (userAux) {
        setUser(userAux);
      }
    }
  }, [user]);

  return (
    <AppContext.Provider value={[user, setUser]}>
      {children}
    </AppContext.Provider>
  );
}

export default UserProvider;

El método setAuth lo definimos en el fichero de peticiones a axios:

import axios from "axios";

export const instance = axios.create({ baseURL: "http://localhost:8080" });

export const setAuth = async (username, password) => {
    const token = btoa(`${username}:${password}`);
    instance.defaults.headers.common.Authorization = `basic ${token}`;
};

Añadiendo lógica al Provider

Es posible añadir métodos específicos para gestionar el contexto.

while(premium == false) verCodigo = false;

Para poder ver el código fuente, accede o suscríbete.

Suscríbete

Para acceder a estos datos, utilizaré la deconstrucción de un objeto:

while(premium == false) verCodigo = false;

Para poder ver el código fuente, accede o suscríbete.

Suscríbete

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.