Hoy vamos a aprender cómo podemos almacenar Cookies y compartirlas entre Client Side y Server Side usando React.

Para el tutorial de hoy vamos a utilizar la librería Nookies.
Esta librería nos solucionará el almacenamiento de Cookies de forma inmediata.
Primero vamos a crear un componente llamado CookieStorage.tsx
import nookies from 'nookies'
enum CookieKeys {
DATO = 'dato',
}
//Configuración
export function getMaxAgeCookie() {
return Number.MAX_SAFE_INTEGER;
}
export function setCookieDato(context: any, valor: string) {
setCookies(context, CookieKeys.DATO, valor);
}
export function getCookieDato(context: any): string {
return getCookies(context, CookieKeys.DATO);
}
//Borrar cookies
export function removeCookieDato(context: any) {
nookies.destroy(context, CookieKeys.DATO);
}
export function getCookies(context: any, clave: CookieKeys): string {
const cookies = nookies.get(context);
return cookies[clave];
}
export function setCookies(context: any, clave: CookieKeys, valor: string) {
nookies.set(context, clave, valor, {
maxAge: getMaxAgeCookie(), // Tiempo de vida de la cookie al máximo
path: '/', // La ruta en la que la cookie es válida (en este caso, la raíz del dominio)
});
}
En este componente he creado una función para configurar las Cookies con el máximo tiempo de ciclo de vida. Además dos funciones para leer y escribir las Cookies.
Con las funciones setCookieDato y getCookieDato podremos obtener y guardar nuevas cookies.
Las cookies se guardan según la clave que se indica en el enum creado.
Para utilizarlo simplemente tendremos que invocar las funciones de la siguiente forma:
Client Side (desde React) el context se pasa a null:
setCookieDato(null, "Test"); getCookieDato(null);
Server Side (desde Next.js en getServerSideProps o getStaticProps) el context se pasa desde la función de Next:
export async function getServerSideProps(context: any) {
...
setCookieDato(context, "Test");
getCookieDato(context);
...
}

Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.