Dioxus 开发指南

核心主题

这将是非常重要的一个章节,我们将讨论 UI 的构建与设计

通过这章的学习,我们将学会如何通过 Dioxus 构建一个漂亮的 UI 界面!这一定很酷!

声明式用户界面§

Dioxus 是一个 声明式框架,这意味着我们不需要手动的 创建 元素和手动 设置 元素信息(通过函数调用)。 我们只需要对我们想要的样式进行简单声明,其他的 Dioxus 会帮我们搞定的!

假设我们需要一个显示红绿灯的程序,它有 红 黄 绿 三种状态,在 命令式 程序中,我们生成它会非常繁琐:

let container = Container::new();

let green_light = Light::new().color("green").enabled(true);
let yellow_light = Light::new().color("yellow").enabled(false);
let red_light = Light::new().color("red").enabled(false);
container.push(green_light);
container.push(yellow_light);
container.push(red_light);

container.set_onclick(move |_| {
    if red_light.enabled() {
        red_light.set_enabled(false);
        green_light.set_enabled(true);
    } else if yellow_light.enabled() {
        yellow_light.set_enabled(false);
        red_light.set_enabled(true);
    } else if green_light.enabled() {
        green_light.set_enabled(false);
        yellow_light.set_enabled(true);
    }
});

它的可读性简直糟透了,不知道几年后再来看看这个代码是什么感受qwq

如果我们使用 Dioxus 框架来完成这个程序,则只需要:

let mut (state, set_state) = use_state(&cx, || "red");

cx.render(rsx!(
    Container {
        Light { color: "red", enabled: state == "red", }
        Light { color: "yellow", enabled: state == "yellow", }
        Light { color: "green", enabled: state == "green", }

        onclick: move |_| {
            set_state(match *state {
                "green" => "yellow",
                "yellow" => "red",
                "red" => "green",
            })
        }
    }
))

这个代码比上面的清晰了不少吧,我们一眼就能看出这程序在做什么,以及能大概想象到渲染出来会是什么样子。

注意:这个概念并不新奇!许多框架都是声明性的—— React 则是其中最流行的。使用声明式框架往往比使用命令式框架更令人愉快。