Children
普通用法
*大多数情况下,*在组件内部包含有 children 时,您并不关心组件具体有什么类型的 children。在这种情况下,下面的例子就足够了。
use yew::prelude::*;
#[derive(Properties, Clone)]
pub struct ListProps {
    #[prop_or_default]
    pub children: Children,
}
pub struct List {
    props: ListProps,
}
impl Component for List {
    type Properties = ListProps;
    // ...
    fn view(&self) -> Html {
        html! {
            <div class="list">
                { for self.props.children.iter() }
            </div>
        }
    }
}
高级用法
当您希望将某一种类型的组件作为 children 传递给您的组件时,您可以使用yew::html::ChildrenWithProps<T> 。
use yew::html::ChildrenWithProps;
use yew::prelude::*;
// ...
#[derive(Properties, Clone)]
pub struct ListProps {
    #[prop_or_default]
    pub children: ChildrenWithProps<Item>,
}
pub struct List {
    props: ListProps,
}
impl Component for ListProps {
    type Properties = ListProps;
    // ...
    fn view(&self) -> Html {
        html! {
            <div class="list">
                { for self.props.children.iter() }
            </div>
        }
    }
}
当然,有时您可能需要将 children 限制为几个不同的组件。在这种情况下,您要再深入一点 Yew。
derive_more crate 在这种情况下非常有用。如果你不想用它的话, 你需要手动为每个变量实现 From 。
use yew::prelude::*;
use yew::html::ChildrenRenderer;
use yew::virtual_dom::{ VChild, VComp };
// `derive_more::From` implements `From<VChild<Primary>>` and
// `From<VChild<Secondary>>` for `Item` automatically!
#[derive(Clone, derive_more::From)]
pub enum Item {
    Primary(VChild<Primary>),
    Secondary(VChild<Secondary>),
}
// Now, we implment `Into<Html>` so that yew knows how to render `Item`.
impl Into<Html> for Item {
    fn into(self) -> Html {
        match self {
            Self::Primary(child) => child.into(),
            Self::Secondary(child) => child.into(),
        }
    }
}
#[derive(Properties, Clone)]
pub struct ListProps {
    #[prop_or_default]
    pub children: ChildrenRenderer<Item>,
}
pub struct List {
    props: ListProps,
}
impl Component for List {
    type Properties = ListProps;
    // ...
    fn view(&self) -> Html {
        html! {
            <div class="list">
                { for self.props.children.iter() }
            </div>
        }
    }
}