Skip to main content

Un framework inspirado en React para crear aplicaciones CLI dinámicas. Interfaces terminal con componentes, estado reactivo y hooks.

Project description

Reactive ⚡️

License: MIT PyPI Version Prompt Toolkit Version Python Versions Architecture

Framework inspirado en React para crear aplicaciones CLI dinámicas con Prompt Toolkit (Python). Crea interfaces terminal con componentes, estado reactivo y hooks.

Características principales ✨

  • 🧩 Arquitectura basada en componentes con enfoque funcional
  • ⚛️ Hooks API familiar (use_state, use_effect, use_ref)
  • 🔄 Actualizaciones de estado eficientes con re-renderizado automático
  • ⌨️ Manejo integrado de eventos y key bindings
  • 🧪 Testing fácil gracias a componentes desacoplados

Instalación 💻

pip install reactive-toolkit

Ejemplo 🧪

from reactive import component, Button, use_state
from prompt_toolkit.widgets import Label

@component
def CounterApp():
    count, set_count = use_state(0)
    
    def increment():
        set_count(count + 1)
    
    def decrement():
        set_count(count - 1)

    return [
        f'Contador: {count}',
        Button(text='➕ Incrementar', handler=increment),
        Button(text='➖ Decrementar', handler=decrement)
    ]

# Ejecutar la aplicación
if __name__ == "__main__":
    from reactive import create_root, run_app
    root, key_bindings = create_root(CounterApp)
    run_app(root, key_bindings=key_bindings)

Flujo de trabajo básico 🔄

graph TD
    A[Estado Cambia] --> B[Re-render Componente]
    B --> C[Actualizar UI]
    C --> D[Esperar Interacción]
    D --> A

Hooks disponibles 🪝

Hooks esenciales

Hook Descripción
use_state() Gestión básica de estado
use_effect() Manejo de efectos secundarios
use_ref() Referencias a elementos
use_context() Acceso al contexto global
use_provider() Consume datos de proveedores de contexto

Hooks avanzados

Hook Descripción
use_id() Genera IDs únicos para accesibilidad
use_key() Manejo personalizado de eventos de teclado
use_memo() Memoización de valores costosos
use_navigation() Acceso a rutas y navegación

Hooks personalizados

¡Crea tus propios hooks para reutilizar lógica! Ejemplo:

from reactive import hook, component, Button

@hook
def use_toggle(initial: bool = False):
    state, set_state = use_state(initial)
    toggle = lambda: set_state(not state)
    return state, toggle

# Uso en componente:
@component
def Switch():
    is_on, toggle = use_toggle()
    return Button(
        text = 'on' if is_on else 'off',
        handler = toggle
    )

Contribuir 🤝

¡PRs son bienvenidos! Para contribuir:

  • Haz fork del repositorio
  • Crea una rama con tu feature (git checkout -b feature/nueva-funcionalidad)
  • Haz commit de tus cambios (git commit -am 'Agrega nueva funcionalidad')
  • Haz push a la rama (git push origin feature/nueva-funcionalidad)
  • Abre un Pull Request

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

reactive_toolkit-1.0.0.tar.gz (43.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

reactive_toolkit-1.0.0-py3-none-any.whl (58.4 kB view details)

Uploaded Python 3

File details

Details for the file reactive_toolkit-1.0.0.tar.gz.

File metadata

  • Download URL: reactive_toolkit-1.0.0.tar.gz
  • Upload date:
  • Size: 43.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.20

File hashes

Hashes for reactive_toolkit-1.0.0.tar.gz
Algorithm Hash digest
SHA256 4a557d4f50eee1f0a7767488879c6284bf4a4a8c5535e8b4af45cf8e9b4aad5d
MD5 c41361cd3811e86000f26c3d9dbc6012
BLAKE2b-256 d4c856dd1fbfbe9b1d022d79cff91ab9a833aa70e9f31300994101dde4e01d65

See more details on using hashes here.

File details

Details for the file reactive_toolkit-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for reactive_toolkit-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2c54117e71510d4d12277eb2f2e2866f586db92f6556301ecddd22bfdd6e9377
MD5 757706f79f3d3066b2c532653373e0b7
BLAKE2b-256 456e4c52fa327b16a6a0b2baaaa05cad10856842ffca95cc5fc910375c1ef198

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page