最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Rust如何使用Sauron實現(xiàn)Web界面交互

 更新時間:2024年03月26日 09:24:54   作者:二次元攻城獅  
Sauron?是一個多功能的?Web?框架和庫,用于構(gòu)建客戶端和/或服務(wù)器端?Web?應(yīng)用程序,重點關(guān)注人體工程學(xué)、簡單性和優(yōu)雅性,這篇文章主要介紹了Rust使用Sauron實現(xiàn)Web界面交互,需要的朋友可以參考下

簡介

Sauron 是一個多功能的 Web 框架和庫,用于構(gòu)建客戶端和/或服務(wù)器端 Web 應(yīng)用程序,重點關(guān)注人體工程學(xué)、簡單性和優(yōu)雅性。這使您可以編寫盡可能少的代碼,并更多地關(guān)注業(yè)務(wù)邏輯而不是框架的內(nèi)部細節(jié)。
github:https://github.com/ivanceras/sauron

文檔:https://sauron-rs.github.io/

架構(gòu)

Sauron 遵循模型-視圖-更新架構(gòu)(也稱為 Elm 架構(gòu)),它總是分為三個部分:

  • 模型 - 應(yīng)用程序的狀態(tài)
  • 視圖 - 一種將狀態(tài)轉(zhuǎn)換為 HTML 的方法
  • 更新 - 一種根據(jù)消息更新狀態(tài)的方法

Application 和組件

為了使模型在 Sauron 程序中運行,它必須實現(xiàn) Application trait,然后定義下面兩個函數(shù):

  • view 函數(shù):該函數(shù)告訴程序如何顯示模型。
  • update 函數(shù):該函數(shù)描述如何根據(jù)消息更新模型狀態(tài)。

簡單入門示例

先決條件

確保已安裝所有必備組件:

  • rust and cargo:Rust基礎(chǔ)環(huán)境和工具。
  • wasm-pack:將 rust 代碼編譯到 webassembly 中,然后放入 ./pkg 目錄中。
  • basic-http-server:在本地提供靜態(tài)文件。

執(zhí)行以下命令安裝wasm-pack

cargo install wasm-pack

執(zhí)行以下命令安裝basic-http-server

cargo install basic-http-server

wasm-pack 默認(rèn)會使用 wasm-opt 工具進行大小優(yōu)化,而這個工具也是運行時下載安裝的。下載 wasm-opt 使用的是 github 鏈接,國內(nèi)環(huán)境大概率是下載失敗的,可以參考 如何安裝WASM-OPT? 手動下載 wasm-opt.exe 后放到 .cargo\bin路徑下。

創(chuàng)建項目

創(chuàng)建一個名為 hello 的新項目:

cargo new --lib hello

在 Cargo.toml 中指定這個 crate 需要編譯為 cdylib動態(tài)系統(tǒng)庫):

[lib]
crate-type = ["cdylib"]

執(zhí)行以下命令,添加sauron作為項目的依賴項。

cargo add sauron

編譯庫文件

修改 src/lib.rs代碼,在段落中顯示“hello”文本:

use sauron::{node, wasm_bindgen, Application, Cmd, Node, Program};
struct App;
impl Application<()> for App {
    fn view(&self) -> Node<()> {
        node! {
            <p>
                "hello"
            </p>
        }
    }
    fn update(&mut self, _msg: ()) -> Cmd<Self, ()> {
        Cmd::none()
    }
}
//函數(shù)應(yīng)該在加載 wasm 模塊時自動啟動,類似于 main 函數(shù)
#[wasm_bindgen(start)]
pub fn main() {
    Program::mount_to_body(App::new());
}
  • view 方法中使用 node! 宏,采用類似 html 的語法來顯示應(yīng)用程序。
  • 為 App 實現(xiàn) Application 特征,實現(xiàn)必要的方法來告訴 sauron 應(yīng)用程序的行為。
  • 這里的 main 函數(shù)在加載 wasm 模塊時自動啟動,函數(shù)可以任意命名,只要配置 start 即可。

執(zhí)行以下命令進行編譯:

wasm-pack build --release --target=web

編譯時間稍微有點長,wasm-pack 會在項目中創(chuàng)建一個文件夾 ./pkg,里面包含生成的編譯文件,只需要關(guān)注其中 2 個文件:

hello.js
hello_bg.wasm

它們的名稱派生自給定的包名稱 <package_name>.js 和 <package_name>_bg.wasm。

引用庫文件

在項目的根目錄中創(chuàng)建 index.html:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
  </head>
  <body>
    <script type=module>
      import init from './pkg/hello.js';
      await init().catch(console.error);
    </script>
  </body>
</html>
  • 使用的是 <script type=module>, 從 ./pkg 文件夾中引用了 ./pkg/hello.js 。
  • 在后臺,./pkg/hello.js 將負(fù)責(zé)在后臺加載 ./pkg/hello_bg.wasm。

運行項目

重新編譯webapp,每次對 rust 代碼進行更改時發(fā)出此命令。

wasm-pack build --release --target=web

最后使用 basic-http-server 提供文件:

basic-http-server

默認(rèn)情況下,它在端口 4000 中提供頁面,導(dǎo)航到 http://127.0.0.1:4000 以查看“hello”消息。

界面交互示例

在瀏覽器中顯示 3 個按鈕,單擊這些按鈕可以增加/減少和重置計數(shù)。

創(chuàng)建項目

創(chuàng)建一個名為 counter 的新 rust 庫項目:

cargo new --lib counter

接下來修改 crate 類型為 “cdylib” 庫 ,添加 sauron 依賴,這里不在贅述。

編譯庫文件

在 src/lib.rs 中放入此代碼:

use sauron::prelude::*;
use sauron::node;
struct App {
    count: i32,
}
//添加了一個函數(shù) new 來創(chuàng)建以 count 0 開頭的初始狀態(tài) App
impl App {
    fn new() -> Self {
        App { count: 0 }
    }
}

定義應(yīng)用程序?qū)⒕哂械囊唤M操作:

enum Msg {
    Increment,
    Decrement,
    Reset,
}

為模型 App 實現(xiàn) Application 特征:

impl Application<Msg> for App {
    fn view(&self) -> Node<Msg> {
        node! {
            <main>
                <input type="button"
                    value="+"
                    on_click=|_| {
                        Msg::Increment
                    }
                />
                <button class="count" on_click=|_|{Msg::Reset} >{text(self.count)}</button>
                <input type="button"
                    value="-"
                    on_click=|_| {
                        Msg::Decrement
                    }
                />
            </main>
        }
    }
    fn update(&mut self, msg: Msg) -> Cmd<Self, Msg> {
        match msg {
            Msg::Increment => self.count += 1,
            Msg::Decrement => self.count -= 1,
            Msg::Reset => self.count = 0,
        }
        Cmd::none()
    }
}
  • view 方法返回類型為 Node<Msg>,這意味著它創(chuàng)建一個 html 節(jié)點,其中它的任何成員 html 元素都有一個事件偵聽器,該事件偵聽器可以向程序處理程序發(fā)出 Msg 消息。
  • update 方法接受 Msg 作為參數(shù),并根據(jù) Msg 的變體修改模型 App。

實現(xiàn)應(yīng)用函數(shù)

接下來為 wasm Web 應(yīng)用定義入口點,通過使用 #[wasm_bindgen(start)] 注釋公共函數(shù)來完成:

#[wasm_bindgen(start)]
pub fn start() {
    Program::mount_to_body(App::new());
}

為了演示純函數(shù)交互,這里再添加一個簡單的加法函數(shù):

#[wasm_bindgen]
pub fn add(a: i32, b: i32) -> i32 {
  a + b
}

如果只需要js調(diào)用Rust的函數(shù),那只需要添加 wasm_bindgen 依賴即可,參考 使用Rust和WebAssembly整花活兒(一)——快速開始。

引用庫文件

在項目基本文件夾的 index.html 文件中鏈接應(yīng)用,可以像往常一樣放置樣式:

<html>
  <head>
    <meta content="text/html;charset=utf-8" http-equiv="Content-Type"/>
    <title>Counter</title>
    <style type="text/css">
        body { font-family: verdana, arial, monospace; }
        main {
            width:30px;
            height: 100px;
            margin:auto;
            text-align: center;
        }
        input, .count{
            font-size: 40px;
            padding: 30px;
            margin: 30px;
        }
    </style>
    <script type=module>
        import init, { add } from './pkg/counter.js';
        await init().catch(console.error);
        const result = add(1, 2);
        console.log(`the result from rust is: ${result}`);
    </script>
  </head>
  <body>
  </body>
</html>

注意上面的 import init, { add } from ,add 函數(shù)在使用前需要導(dǎo)入,否則會調(diào)用失敗。

運行項目

編譯庫文件:

wasm-pack build --release --target=web

啟動靜態(tài)站點:

basic-http-server

訪問 http://127.0.0.1:4000 查看效果:

參考資料

到此這篇關(guān)于Rust使用Sauron實現(xiàn)Web界面交互的文章就介紹到這了,更多相關(guān)Rust Web界面交互內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Rust語言的新手了解和學(xué)習(xí)入門啟蒙教程

    Rust語言的新手了解和學(xué)習(xí)入門啟蒙教程

    這篇文章主要介紹了rust的特點、安裝、項目結(jié)構(gòu)、IDE環(huán)境配置、代碼運行,講解了如何安裝Rust編譯器,創(chuàng)建和運行第一個Rust程序,并對Rust語言的特點和優(yōu)勢作了說明,包括內(nèi)存安全、高效性能、并發(fā)性、社區(qū)支持和統(tǒng)一包管理等,是新手了解和學(xué)習(xí)Rust語言的啟蒙教程
    2024-12-12
  • Rust實現(xiàn)grep命令行工具的方法

    Rust實現(xiàn)grep命令行工具的方法

    這篇文章主要介紹了Rust實現(xiàn)grep命令行工具的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Rust?中的?JSON?處理利器serde_json功能詳解

    Rust?中的?JSON?處理利器serde_json功能詳解

    本文介紹Rust中serde_json庫,用于JSON序列化與反序列化,支持復(fù)雜結(jié)構(gòu)及錯誤處理,助力高效處理數(shù)據(jù)交換需求,本文給大家詳細介紹Rust中的JSON處理利器serde_json功能,感興趣的朋友一起看看吧
    2025-06-06
  • Rust自定義安裝路徑的詳細圖文教程

    Rust自定義安裝路徑的詳細圖文教程

    工欲善其事必先利其器,無論是對小白還是大神來說,想要學(xué)習(xí) Rust 第一步那必須是 Rust 的環(huán)境配置,下面這篇文章主要給大家介紹了關(guān)于Rust自定義安裝路徑的詳細圖文教程,需要的朋友可以參考下
    2023-03-03
  • Rust 函數(shù)詳解

    Rust 函數(shù)詳解

    函數(shù)在 Rust 語言中是普遍存在的。Rust 支持多種編程范式,但更偏向于函數(shù)式,函數(shù)在 Rust 中是“一等公民”,函數(shù)可以作為數(shù)據(jù)在程序中進行傳遞,對Rust 函數(shù)相關(guān)知識感興趣的朋友一起看看吧
    2021-11-11
  • 利用Rust實現(xiàn)一個簡單的Ping應(yīng)用

    利用Rust實現(xiàn)一個簡單的Ping應(yīng)用

    這兩年Rust火的一塌糊涂,甚至都燒到了前端,再不學(xué)習(xí)怕是要落伍了。最近翻了翻文檔,寫了個簡單的Ping應(yīng)用練練手,感興趣的小伙伴可以了解一下
    2022-12-12
  • Rust語言和C/C++區(qū)別對比,Rust和C語言哪個好

    Rust語言和C/C++區(qū)別對比,Rust和C語言哪個好

    Rust具有與C語言相當(dāng)?shù)乃俣群蛢?nèi)存效率,但無需手動內(nèi)存管理或垃圾回收,它擁有出色的工具支持、友好的編譯器和不斷發(fā)展的開發(fā)者社區(qū),使用Rust能提升程序性能,最重要的是,對Python開發(fā)者而言,Rust比C語言更容易學(xué)習(xí)
    2025-02-02
  • 詳解Rust中的workspace

    詳解Rust中的workspace

    這篇文章主要向大家介紹Rust中的workspace,主要內(nèi)容包括基礎(chǔ)應(yīng)用、實用技巧、原理機制等方面,這個概念在Rust中是通用的,只不過maven換成了cargo,而模塊變成了crate,下面跟著小編通過一個例子給大家介紹下
    2022-03-03
  • rust引用和借用的使用小結(jié)

    rust引用和借用的使用小結(jié)

    在rust中,引用的語法非常簡單。通過&來取引用,通過*來解引用,這篇文章主要介紹了rust引用和借用的使用小結(jié),總的來說,借用規(guī)則,同一時刻,你只能擁有要么一個可變引用,?要么任意多個不可變引用,具體內(nèi)容詳情跟隨小編一起看看吧
    2023-01-01
  • Rust 語言中的 into() 方法及代碼實例

    Rust 語言中的 into() 方法及代碼實例

    在 Rust 中,into() 方法通常用于將一個類型的值轉(zhuǎn)換為另一個類型,這通常涉及到資源的所有權(quán)轉(zhuǎn)移,本文給大家介紹Rust 語言中的 into() 方法及代碼實例,感謝的朋友跟隨小編一起看看吧
    2024-03-03

最新評論

威远县| 陇川县| 新巴尔虎左旗| 铜鼓县| 谷城县| 景德镇市| 宝兴县| 红原县| 江北区| 江达县| 新平| 夏邑县| 庆云县| 闵行区| 丰台区| 冕宁县| 冷水江市| 枣阳市| 客服| 岑巩县| 集安市| 贵南县| 中卫市| 柞水县| 沅陵县| 阿图什市| 内黄县| 绿春县| 巴南区| 隆安县| 彰化县| 宁津县| 华亭县| 廉江市| 南溪县| SHOW| 泗阳县| 竹溪县| 富顺县| 凤冈县| 和硕县|