7 个不稳定版本

0.4.0 2021 年 5 月 15 日
0.3.2 2020 年 9 月 8 日
0.3.1 2020 年 8 月 16 日
0.3.0 2020 年 6 月 30 日
0.1.1 2019 年 11 月 11 日

#2166 in Web 编程

Download history 801/week @ 2024-03-24 844/week @ 2024-03-31 725/week @ 2024-04-07 945/week @ 2024-04-14 759/week @ 2024-04-21 645/week @ 2024-04-28 608/week @ 2024-05-05 682/week @ 2024-05-12 656/week @ 2024-05-19 547/week @ 2024-05-26 714/week @ 2024-06-02 539/week @ 2024-06-09 618/week @ 2024-06-16 743/week @ 2024-06-23 442/week @ 2024-06-30 632/week @ 2024-07-07

2,458 每月下载量
5 crates 中使用

MIT/Apache

690KB
15K SLoC

Yewtil

Yew 前端 Web 框架的实用工具包。

这个包原本包含一个领域特定语言,它允许在不使用 html! 宏的情况下创建组件,但现在这部分已经移动到另一个包中(yew-dsl)。

目的

提供一个地方来存放与 Yew 常用的实用工具,而不必将它们包含在核心 Yew 包中。正因为如此,Yew 包可以进行破坏性的变更,这将导致 yewtil 与 Yew 不兼容。

特性

目前,这个包以“稳定”的方式支持以下特性

  • NeqAssign - 使为 ShouldRender 分配属性并返回相关值变得更容易。
  • 纯组件 - 使用 PureComponent 特性和 Pure 组件适配器实现纯组件。这应该会使定义不包含状态的简单组件变得更加容易。
    • 函数组件 - 一个宏,它接受一个返回 Html 的函数并将其转换为纯组件。
  • Mrc/Irc 智能指针 - 比 Rc 更易于在 Yew 中使用的类似指针。
  • History - 一个包装器,它保存分配给它的值的记录。
  • Effect - 通过在 html! 回调中定义要更改的内容,而不是在 Component::update() 中处理消息来更新组件状态的方式。(已弃用)

此crate还具有功能标志,可以启用以下 实验性 功能

  • Lrc 智能指针 - 在链表上实现的类似于 Rc 的指针,允许进行新颖的状态更新机制和遍历链式共享指针。(需要模糊测试以确保不会泄漏。)(已弃用)

这些实验性功能可能没有得到充分的审查,可能会发生重大变化或被删除。

示例项目

这里有示例展示了如何使用此crate中的每个稳定功能

查看纯组件示例,了解纯组件是如何工作的。

示例用法

neq_assign

fn change(&mut self, props: Self::Properties) -> ShouldRender {
    self.props.neq_assign(props)
}

纯组件

pub type Button = Pure<PureButton>;

#[derive(PartialEq, Clone, Properties)]
pub struct PureButton {
    pub callback: Callback<Msg>,
    #[prop_or_default]
    pub text: String,
}

impl PureComponent for PureButton {
    fn render(&self) -> VNode {
        html! {
            <button onclick=&self.callback>{ &self.text }</button>
        }
    }
}

历史

pub struct Model {
    text: History<String>,
}

// ...
fn update(&mut self, msg: Self::Message) -> ShouldRender {
    match msg {
        Msg::SetText(text) => self.text.neq_set(text),
        Msg::Reset => self.text.reset(),
        Msg::Forget => {
            self.text.forget();
            false
        }
    }
}

更新计划

此crate将针对稳定的Yew。

随着Yew引入新的语法,此crate可能会看到一些更新,但由于这些更新的罕见性,此crate可能保持未更改一段时间。

范围

与主Yew crate相比,此crate对其代码的要求不那么严格;如果您想包含函数、类型或特性,请提交一个pull request或issue。

欢迎组件,但它们不得有外部依赖,应解决Yew用户遇到的一些问题,如果可能的话,应允许主题化,如自动滚动的包装器、RecyclerView/无限滚动组件或可能的全功能输入组件。

如模态框或下拉菜单等常见UI元素最好留给组件库,因为它们通常与用于显示它们的CSS相关联。 Yewtify crate就是这样一个组件库。

稳定性

由于此crate旨在提供各种辅助类型、特性和函数,而每个功能的效用可能在添加功能时未知,因此新添加的功能可能不会包含在默认功能集中,并且可能被保留在功能标志后面。

在早期开发期间,标记为 experimental 的功能可能会频繁更改或甚至完全删除,而标记为 stable 的功能则不会删除,并且可以信赖其不会发生重大变化。

依赖关系

~2.5–6MB
~109K SLoC