npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

subscriber_state

v2.0.0

Published

subscriberState es un hook de react para controlar el estado de tus aplicaciones, basado en suscripciones, suscribiendote a las propiedades del estado.

Downloads

67

Readme

subscriber_state

** Un manejador de estado global simple y flexible para aplicaciones React **

Descripción

Subscribe_state es un paquete de TypeScript diseñado para simplificar la gestión del estado global en aplicaciones React. Ofrec0e una API intuitiva para definir el estado inicial, crear acciones y suscribir componentes a los cambios de estado.

Características clave:

  • Definición declarativa del estado: Define el estado inicial y las acciones de manera clara y concisa.
  • Tipos seguros: TypeScript garantiza la seguridad de tipos en todo el código.
  • Suscripción flexible: Suscríbete a cualquier parte del estado utilizando strings o arrays.
  • Rendimiento optimizado: Evita re-renderizados innecesarios gracias a la opción de deshabilitar las actualizaciones automáticas.
  • API sencilla: Una API intuitiva y fácil de aprender.

Instalación

  npm install subscriber_state

API

  • createWarehouse: Función principal para crear un almacén de estado.

    • Descripción detallada: Esta función se utiliza para definir el estado inicial de una aplicación y las acciones que pueden modificar ese estado. El estado inicial se proporciona como un objeto que cumple con el tipo T, y las acciones se definen como funciones que modifican el estado. La función createWarehouse crea un almacén que puede ser utilizado para suscribirse a cambios en el estado y realizar actualizaciones.

    • Firma: createWarehouse<T, K>(createInitialState: (update: Update) => T & K | (T & K))

      • T: Tipo del estado de la aplicación.
      • K: Tipo de las acciones que pueden modificar el estado.
      • createInitialState: Función que recibe una función de actualización (update) y devuelve el estado inicial u objeto de que cumple con los tipos T y K
  • update: Función realiza una llanada a actializar el estado.

  • useActions: El hook useActions, es una utilidad para acceder y utilizar las acciones definidas dentro de un almacén de estado global. Ofrece una manera conveniente de interactuar directamente con el estado, desencadenando actualizaciones.

    • Descripción:

      • Recuperando Acciones: El hook permite obtener acciones específicas o todas ellas desde el almacén de estado global.
      • Selección de Acciones: Puedes especificar acciones individuales por nombre o solicitar todas las acciones a la vez.
    • Firma: useActions(actions: string | string[]): { [key in keyof T]: Action }

      • Tipo Genérico T: Representa el tipo del objeto de acciones, que se infiere del parámetro actions.

      • Parámetro actions:

        • String: Puede ser un nombre de acción único.
        • Array de Strings: Puede ser un array de nombres de acciones.
      • Tipo de Retorno: Un objeto que contiene las acciones especificadas como funciones.

  • useSubscriber: Hook para suscribirse a propiedades del estado.

    • Descripción detallada: useSubscriber te permite "escuchar" los cambios que ocurren en una o varias propiedades de tu estado global. Cuando alguna de estas propiedades se actualiza, tu componente se re-renderizará automáticamente, reflejando los nuevos valores.

    • Parámetros:

      • Primer parámetro (string o array de strings): Indica las propiedades específicas a las que quieres suscribirte. Puedes pasar un string con el nombre de una propiedad, un array de strings con múltiples nombres, o la palabra "all" para suscribirte a todas las propiedades.
      • Segundo parámetro (booleano, opcional): Este parámetro, que por defecto es false, te permite controlar si quieres que tu componente se re-renderice inmediatamente cuando se actualicen las propiedades suscritas. Si lo estableces en true, el re-renderizado se evetara.
    • Retorno: El hook useSubscriber devuelve una tupla (un array) con dos elementos:

      • objeto 1: Contiene las propiedades a las que te has suscrito. Puedes acceder a sus valores directamente.
      • objeto 2: Contiene todas las acciones disponibles en tu almacén de estado. Esto te permite modificar el estado si es necesario.

Uso básico

createWarehouse

Ejemolo 1:

import { createWarehouse, update } from 'subscriber_state';

type State = {
  counter: number,
  text: string,
  darkMode: boolean
}

type Actions = {
  onIncrementCounter: () => void,
  onChangeText: (text: string) => void,
  onChangeDarkMode: (isDarkMode: boolean) => void
}

function onIncrementCounter() {
  update<State>((state: State): State => {
    return ({ ...state, counter: state.counter + 1 })
  })
};

function onChangeText(text: string) {
  update<State>((state: State): State => ({ ...state, text }))
};

function onChangeDarkMode(isDarkMode: boolean) {
  update<State>((state: State): State => ({ ...state, darkMode: isDarkMode }))
};

createWarehouse<State, Actions>({
  counter: 0,
  text: 'wold',
  darkMode: true,
  onIncrementCounter,
  onChangeText,
  onChangeDarkMode
});

Ejemolo 2:

import { createWarehouse, type Update } from 'subscriber_state';

type State = {
  counter: number,
  text: string,
  darkMode: boolean
}

type Actions = {
  onIncrementCounter: () => void,
  onChangeText: (text: string) => void,
  onChangeDarkMode: (isDarkMode: boolean) => void
}

createWarehouse<State, Actions>((update: Update)=>({
  counter: 0,
  text: 'wold',
  darkMode: true,
  onIncrementCounter: () => {
    update<State>((state: State): State => {
      return ({ ...state, counter: state.counter + 1 })
    })
  },
  onChangeText: (text: string) => {
    update<State>((state: State): State => ({ ...state, text }))
  },
  onChangeDarkMode: (isDarkMode: boolean) => {
    update<State>((state: State): State => ({ ...state, darkMode: isDarkMode }))
  }
}));

useActions

Ejemplo 1:

import { useActions } from 'subscriber_state'

function App() {
  //Acción Específica: Este ejemplo extrae directamente la acción onIncrementCounter del almacén.
  const { onChangeText } = useActions(["onChangeText"]);
  
  //Uso: La función onIncrementCounter puede ser llamada para desencadenar la actualización de estado correspondiente.
  return (
    <input name="name" onChange={(event: React.ChangeEvent<HTMLInputElement>) => onChangeText(event.target.value)} />
  );
}

Ejemplo 2:

import { useActions } from 'subscriber_state'

function App() {
  // Todas las Acciones: Este ejemplo recupera todas las acciones definidas en el almacén.
  const actions = useActions();
//const actions = useActions('all');

 // Uso: El objeto actions puede ser utilizado para acceder a cualquier acción por su nombre. Por ejemplo, actions.onIncrementCounter() o actions.onChangeText('new text').
 return (
    <button onClick={actions.onIncrementCounter}>to raise</button>
 )
}

useSubscriber

ejemplo 1

 import { useSubscriber } from 'subscriber_state'

export default function InsertText() {
  const [{ darkMode }, { onChangeText }] = useSubscriber('darkMode');

  return (...);
}

ejemplo 2

import { useSubscriber } from 'subscriber_state'

export default function InsertText() {
  const [state, { onChangeText }] = useSubscriber(['darkMode', 'counter']);

  const color: state.darkMode ? '#0a9aff' : '#000000';
  //chroma libreria externa.
  const complementaryColor = chroma(color).complementary().hex();
  
  const _divStyle = {
    padding: '10px',
    border: `2px solid ${complementaryColor}`,
    backgroundColor: color
  }
  
  const _spanStyle = { color }
  
  return (
    <div style={_divStyle}>
    ...
    <span style={_spanStyle} >{state.counter}</span>
    ...
    </div>
  );
}