♻️ (core): Evita doble clonado de InRegion en Child
Los prototipos registrados con `InRegion` se clonaban dos veces por petición: una al ensamblar la región (`ComponentGlobal::as_child`) y otra al renderizar (`Child::render`). Ahora sólo se clonan al renderizar.
This commit is contained in:
parent
ce6b4d2581
commit
845d91d8c1
2 changed files with 33 additions and 40 deletions
|
|
@ -32,6 +32,13 @@ impl Child {
|
|||
Child(Some(Arc::new(component)))
|
||||
}
|
||||
|
||||
// Envuelve un `Arc` ya construido, sin clonar el componente. La usa `core::theme::regions` para
|
||||
// registrar los prototipos de `InRegion` sin clonar su estado hasta que `render()` obtenga la
|
||||
// copia propia que necesita mutar.
|
||||
pub(crate) fn from_arc(component: Arc<dyn Component>) -> Self {
|
||||
Child(Some(component))
|
||||
}
|
||||
|
||||
// **< Child BUILDER >**************************************************************************
|
||||
|
||||
/// Establece un componente nuevo, o lo vacía.
|
||||
|
|
@ -73,7 +80,7 @@ impl Child {
|
|||
}
|
||||
}
|
||||
|
||||
impl<C: Component + 'static> From<Embed<C>> for Child {
|
||||
impl<C: Component> From<Embed<C>> for Child {
|
||||
/// Convierte un [`Embed<C>`] en un [`Child`], consumiendo el componente tipado.
|
||||
///
|
||||
/// Útil cuando se tiene un [`Embed`] para añadir a una lista [`Children`]:
|
||||
|
|
@ -93,7 +100,7 @@ impl<C: Component + 'static> From<Embed<C>> for Child {
|
|||
}
|
||||
}
|
||||
|
||||
impl<T: Component + 'static> From<T> for Child {
|
||||
impl<T: Component> From<T> for Child {
|
||||
/// Convierte cualquier componente en un [`Child`], equivalente a [`Child::with()`].
|
||||
#[inline]
|
||||
fn from(component: T) -> Self {
|
||||
|
|
@ -101,7 +108,7 @@ impl<T: Component + 'static> From<T> for Child {
|
|||
}
|
||||
}
|
||||
|
||||
impl<T: Component + 'static> From<T> for ChildOp {
|
||||
impl<T: Component> From<T> for ChildOp {
|
||||
/// Convierte un componente en [`ChildOp::Add`], permitiendo pasar componentes directamente a
|
||||
/// métodos como [`Children::with_child`] sin envolverlos explícitamente.
|
||||
#[inline]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue