Dioxus 0.5: reescritura de signals, eliminación de lifetimes, hot reloading de CSS y más
- En Dioxus Labs existe una regla no oficial que solo permite una reescritura por año.
- Dioxus es una librería para construir GUI con Rust, que originalmente comenzó como una reescritura de Yew.
- Dioxus 0.5 cambió hacia una dirección más simple, robusta y refinada en respuesta a las solicitudes de la comunidad.
Nuevas funciones
- Reescritura completa de
dioxus-core para eliminar todo el código unsafe.
- Transición a una API basada en
Signal sin copias y sin usar use_state ni use_ref.
- Eliminación de todos los lifetimes y del estado
cx: Scope.
- Introducción de una única función
launch para iniciar apps en todas las plataformas.
- Hot reloading de recursos con soporte para Tailwind y Vanilla CSS.
- Reescritura de eventos para acceder a los tipos de eventos nativos
WebSys de cada plataforma.
- Extensión de componentes para agregar atributos de elementos (por ejemplo, Link recibe todos los atributos de
<a/>).
- Integración de error boundaries unificados y de server futures con Suspense.
- Mejora de 5 veces en la velocidad de reconciliación en escritorio y handlers de recursos personalizados para streaming de bytes.
- Streaming de server functions y hot reloading full-stack.
- Muchas mejoras de calidad de vida, correcciones de errores y más.
El problema de los lifetimes
- Para hacer Dioxus más simple, se eliminaron todos los lifetimes.
- Los problemas con lifetimes suelen intimidar fácilmente a principiantes de Rust y también confunden a desarrolladores experimentados.
- Dioxus 0.5 elimina lifetimes y
Scope, e introduce signals como solución de manejo de estado con Copy.
Eliminación de scopes y lifetimes
- En la nueva versión se eliminaron los scopes y el lifetime
'bump.
- Declarar componentes y usar funciones de runtime dentro de ellos ahora es mucho más fácil.
Eliminación de todo el código unsafe
- Al eliminar el lifetime
'bump y los scopes, también se eliminó mucho código unsafe.
- dioxus-core 0.5 no tiene código unsafe.
Signals
- Se introducen los signals como pieza base del estado principal de los componentes.
Signal<T> es Copy incluso si el valor interno T no lo es.
- Los signals ofrecen suscripciones más inteligentes, de modo que solo se vuelven a renderizar los componentes que los leen.
Hot reloading de CSS
- Soporte para hot reloading de archivos CSS, donde el CLI
dx observa los archivos y transmite las actualizaciones a la app al instante.
Reescritura del sistema de eventos
- Dioxus 0.5 expone los tipos de eventos nativos de cada plataforma e introduce traits que ofrecen una API entre plataformas.
Lanzamiento multiplataforma
- La nueva API multiplataforma permite apuntar fácilmente a varias plataformas con la misma aplicación.
Sistema de recursos en beta
- El nuevo sistema de recursos, manganis, se integra con el CLI para verificar, empaquetar y optimizar los recursos dentro de la aplicación.
Renderizado de escritorio 5 veces más rápido
- Se implementaron varias optimizaciones para mejorar la velocidad de renderizado.
Extensión de atributos
- Es útil al proporcionar funcionalidades adicionales a elementos específicos.
Abreviación de atributos
- Se puede usar sintaxis abreviada de atributos al pasar atributos a elementos y componentes.
Fusión de atributos en varias líneas
- Se agregó una función de fusión de atributos para facilitar la creación de atributos condicionales.
Streaming de server functions
- Se permite que las server functions transmitan datos al cliente.
Plataforma CLI full-stack
- Se pueden servir apps full-stack usando el comando
dx.
Soporte para router en LiveView
- El router funciona de inmediato en apps LiveView.
Handlers de recursos personalizados
- En escritorio se admiten handlers de recursos personalizados para transmitir datos al navegador de forma eficiente.
Manejo nativo de archivos
- En escritorio ahora se admite correctamente el arrastre de archivos.
Manejo de errores
- Se pueden manejar errores fácilmente en la app usando error boundaries y el trait throw.
Hot reloading por defecto y modo "desarrollo" para escritorio
- El hot reloading está activado por defecto y mejora enormemente la experiencia de desarrollo de apps de escritorio.
Actualización de las plantillas de dioxus
- Miles, nuevo miembro del equipo principal, renovó ampliamente la documentación y las plantillas.
Dioxus-Community y Dioxus-std
- Dioxus Community actualizó crates importantes del ecosistema para alinearlos con la versión 0.5.
Funciones que llegarán pronto
- Estabilización e integración del sistema de recursos, bundle splitting de
.wasm, Islands e interactividad reanudable, server components, herramientas de desarrollo mejoradas y renovación de móvil y full-stack, entre otras.
Vista previa del regreso de Dioxus-Blitz
- Con "Blitz 2.0", se integra Servo para permitir renderizado nativo usando WGPU con el mismo motor CSS que impulsa Firefox.
Cómo contribuir
- Se puede contribuir traduciendo documentación, probando "good first issues", mejorando documentación, colaborando en el CLI o respondiendo preguntas en la comunidad de Discord.
Opinión de GN⁺
- Dioxus 0.5 es una actualización importante para el desarrollo de GUI basado en Rust, y ofrece a los desarrolladores un entorno más fácil y seguro.
- La eliminación de lifetimes y scopes reduce la complejidad del desarrollo en Rust, y la API basada en signals simplifica aún más el manejo de estado.
- Las mejoras en hot reloading de CSS y en el sistema de eventos contribuirán a elevar la productividad del desarrollo frontend.
- El hot reloading y la función de lanzamiento multiplataforma permiten a los desarrolladores tener una experiencia consistente en distintas plataformas.
- Se espera que estos cambios tengan un impacto positivo en las comunidades de Rust y desarrollo web, especialmente para quienes desarrollan aplicaciones web y de escritorio con Rust.
1 comentarios
Opiniones en Hacker News
Experiencia del primer usuario con los cambios de Dioxus 0.5
Pregunta sobre el soporte de SVG
Curiosidad sobre la programación en Rust y pregunta sobre cómo funciona el crate
generational-boxgenerational-boxpuede conservar valores sin copiar y si eso es seguro.Experiencia desarrollando la página principal de Freenet con Dioxus
Impresiones sobre cómo Dioxus captura los elementos del éxito de React y agrega innovación
Opinión sobre RSX en comparación con SwiftUI
Preocupación por la eliminación de los lifetimes en Dioxus
Pregunta sobre la integración con Web Components
Pregunta sobre el método de renderizado de apps nativas