gloo

2022-02-14  本文已影响0人  子十一刻

官网:https://gloo-rs.web.app/
Github:https://github.com/rustwasm/gloo

一个使用Rust和Wasm构建快速、可靠的Web应用程序和库的工具包。

简介

Gloo是一些库的集合,这些库为浏览器api提供了符合人体工程学的Rust包装器。由于web-sys/js-sys这两个库直接使用非常困难也不太不方便,因此为原始绑定提供了包装器,这使得使用这些api更容易。这就是为什么它被称为“工具箱”,而不是“库”或“框架”。

背景

在Rust和WebAssembly工作组的2019年路线图中,我们有意选择通过构建一个模块化工具包来培育我们的开发库生态系统:

在模块化工具包上进行协作

以模块化的方式构建[高级库]的想法,将允许社区中的其他人以不同的方式将组件组合在一起,这让我非常兴奋。这有望使整个生态系统更加强大。

特别是我希望看到用类似JSX的语法实现虚拟DOM库的模块化努力。在这方面有过几次努力,但似乎都是相对单一的,而且“内置电池”。我希望这在2019年能够改变。

Ryan Levick in Rust WebAssembly 2019

不要创建品牌孤岛。品牌化或许有助于获得名声。但如果我们真的想要拉斯特的瓦姆故事获得成功,我们应该想办法合作,而不是开拓领地。

Yoshua Wuyts in Wasm 2019

2018年,我们创建了js-sys和web-sys这样的基础库。2019年,我们应该在它们的基础上构建更加模块化、高水平的库,并将这些库收集到一个完整的工具箱中,以提供整体体验。你在处理 wasm 时这个工具包和它的库将提供所有你想要的。

构建一个全新的Web应用程序?使用所有的工具来开始工作。精心制作一个小Wasm模块,并将其集成到现有的JavaScript项目中?从工具箱中获取您需要的目标库,并单独使用它。

Gloo是一个模块化工具包。

目标

示例

这个例子使用 gloo::events 添加事件监听器,使用 gloo::timers 创建延时。先创建一个 <button> 元素,并向其绑定 “click” 事件侦听器。无论何时单击按钮,它都会启动一个一秒的延时器,会把按钮的文本内容修改为“来自一秒前的问候!”。

use gloo::{events::EventListener, timers::callback::Timeout};
use wasm_bindgen::prelude::*;

pub struct DelayedHelloButton {
  button: web_sys::element,
  on_click: events::EventListener,
}

impl DelayedHelloButton {
  pub fn new(
    document: &web_sys::Document
  ) -> Result<DelayedHelloButton, JsValue> {
    // 创建 button 元素
    let button = document.create_element("button")?;

    // 监听按钮的点击事件
    let button2 = button.clone();
    let on_click = EventListener::new(&button, "click", move |_e| {
      // 1秒延时后更新按钮的文本内容
      let button3 = button2.clone();
      Timeout::new(1_000, move || {
        button3.set_text_content(Some("来自一秒前的问候!"));
      })
      .forget();
    });

    Ok(DelayedHelloButton { button, on_click })
  }
}
上一篇 下一篇

猜你喜欢

热点阅读