DEV Community

Cover image for Xoid, Introducción a un administrador de estado pequeño y escalable para React
Jhony Vega
Jhony Vega

Posted on

3 1

Xoid, Introducción a un administrador de estado pequeño y escalable para React

Para administrar el estado global en React existen muchas alternativas entre ellas las más conocidas como Redux y Mobx que son buenas opciones para muchos proyectos.
Investigando me encontré con una alternativa bastante interesante llamada Xoid un administrador de estados con una API sencilla, la manera en la que está escrita es semejante a otros adminstradores de estados globales basado en hooks como Recoil o Zustand.

Iniciaremos instalando el paquete necesario

Para instalarlo puedes usar yarn o npm, en este caso se usará yarn.

yarn add xoid
Enter fullscreen mode Exit fullscreen mode

Comenzaremos creando una tienda

Para crear una tienda usamos la función create el cuál toma dos argumentos el primer valor es el estado(valores primitivos, objetos, arreglos), el segundo toma una función que retorna una serie de acciones en un objeto, no es la única forma de retornar ya que el tipo de valor devuelto puede ser un arreglo.

import { create, set } from "xoid";

// Tienda de un contador
const counterStore = create(0, (store) => ({
  increment: () => {
    set(store, (state) => state + 1));
  },
  decrement: () => {
    set(store, (state) => state - 1);
  }
}));
Enter fullscreen mode Exit fullscreen mode

Como puedes observar la forma de crear una tienda es bastante sencilla.

Modificando el estado en un componente

Una vez creado la tienda para poder acceder a su estado y acciones usaremos el hook useStore que nos provee Xoid. Este hook tiene la misma estructura que useState en la cuál devuelve un arreglo de valores, el estado actual y el modificador.

import { useStore } from "xoid";

const Counter = () => {
  const [ counter, { increment, decrement } ] = useStore(counterStore);
  return(
   <div>
      <h1>Value: {counter}</h1>
      <button onClick={() => increment()}>increment</button>
      <button onClick={() => decrement()}>decrement</button>
   </div>
  );
}
Enter fullscreen mode Exit fullscreen mode

Qué sigue ?

Ahora que conocemos la sintaxis básica iremos un paso más, en otra tienda llamada duplicateCounterStore nos suscribimos a la tienda creada anteriormente para poder duplicar su valor. ¿Cómo hacemos la subscripción a otra tienda?.
En vez de pasarle un valor al primer argumento lo que hacemos es pasarle una función la cuál nos permitirá almacenar un valor derivado de otras tiendas.

const duplicateCounterStore = create(
 get => get(counterStore) * 2
);
Enter fullscreen mode Exit fullscreen mode

De esta manera cada vez que cambie el valor de una tienda a la que esté suscrita, ella también cambiará su estado y podremos usarlo de la manera en que se requiera.
Para finalizar usaremos la nueva tienda creada en nuestro componente Counter.

import { useStore } from "xoid";

const Counter = () => {
  const [ counter, { increment, decrement } ] = useStore(counterStore);
  const [ duplicateCounter ] = useStore(duplicateCounterStore);
  return(
   <div>
      <h1>Value 1: {counter}</h1>
      <h2>Value 2: {duplicateCounter}</h2>
      <button onClick={() => increment()}>increment</button>
      <button onClick={() => decrement()}>decrement</button>
   </div>
  );
}
Enter fullscreen mode Exit fullscreen mode

Como puedes ver es bastante sencillo sin embargo tiene muchas más características interesantes como el uso de selectores, máquinas de estado, actualización de objetos anidados muy sencillo, acciones asincrónicas, estados locales y muchas cosas más😊.
Ahora que conoces una breve introducción a este manejador de estado te invito a explorar más en su documentación de Xoid.

SurveyJS custom survey software

JavaScript UI Libraries for Surveys and Forms

SurveyJS lets you build a JSON-based form management system that integrates with any backend, giving you full control over your data and no user limits. Includes support for custom question types, skip logic, integrated CCS editor, PDF export, real-time analytics & more.

Learn more

Top comments (0)

Heroku

Simplify your DevOps and maximize your time.

Since 2007, Heroku has been the go-to platform for developers as it monitors uptime, performance, and infrastructure concerns, allowing you to focus on writing code.

Learn More

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay