1

我遇到了 Yew 库的组件机制的问题。如果我在主模型的 html 宏的宏中包含任何其他 html 代码,编译器会抱怨“只允许一个根 html 元素”。

我的结构如下:

main.rs

impl Component for Model {
    // ...

    fn view(&self) -> Html<Self> {
        html! {
            <Navigation />
            <p>{ "Hello World!" }</p>
        }
    }
}

组件/导航.rs

impl Component for Navigation {
    // ...

    fn view(&self) -> Html<Self> {
        html! {
            <nav class=("uk-navbar-container","uk-padding","uk-padding-remove-bottom","uk-padding-remove-top"), uk-navbar="">
                // ...
            </nav>
        }
    }
}

我怀疑 html 宏在 html 标签周围添加了一个 -tag 或整个 index.html,从而导致了“双”html 标签。但是,我怎样才能避免这种情况,或者在使用组件时我错过了什么?

4

2 回答 2

4

如前所述,您需要将其包装起来。Yew 支持 JSX,你可以这样做:

impl Component for Model {
    // ...

    fn view(&self) -> Html<Self> {
        html! {
            <>
                <Navigation />
                <p>{ "Hello World!" }</p>
            </>
        }
    }
}

我更喜欢这种方式,因为它不会向呈现的文档添加任何额外的 HTML。A<div>最终可能会破坏现有的 CSS 或 JS。但是,如果您编写一个全新的组件,那么每个组件始终只有一个包装 HTML 元素(=使用 div)也是一个好主意。

于 2020-01-13T15:47:15.493 回答
1

编译器抱怨是关于 yewhtml!宏必须有一个包含所有内容的元素。

因此,该错误的解决方法是简单地添加一个包装器元素,如下所示:

main.rs

impl Component for Model {
    // ...

    fn view(&self) -> Html<Self> {
        html! {
            <div>
                <Navigation />
                <p>{ "Hello World!" }</p>
            </div>
        }
    }
}

它不必是 a div,它可以是任何 html 元素。

于 2020-01-05T03:24:38.227 回答