leptos框架的优势
Leptos 是一个基于 Rust 的全栈 Web 框架,用细粒度的响应式系统来构建声明式用户界面:
- 高性能:Leptos 使用细粒度的响应式系统,避免了传统虚拟 DOM 的对比操作,从而实现更高效的 UI 更新,提高了性能表现。
- 全栈同构:Leptos 可以在客户端和服务器端使用同一套代码进行开发,提供同构服务器函数,这样前后端交互变得更加简单,开发效率也提高了,代码复用也更方便。
- 多种渲染模式:Leptos 支持客户端渲染(CSR)和服务器端渲染(SSR),并且具有 HTML 流式传输和 Suspense 组件等特性,适合用来构建现代 Web 应用。
- 声明式 UI 构建:通过类似 JSX 的模板语法,Leptos 让开发者可以用声明式的方式来创建用户界面,这大大简化了开发过程。
- 类型安全和内存安全:因为 Leptos 基于 Rust 开发,所以它继承了 Rust 语言的类型安全和内存安全特性,减少了运行时的错误。
最近持续一周leptos框架刷新GithubTrending榜第一名,让我们了解一下这个框架是个什么鬼,怎么用。
环境设置
首先,我们需要设置开发环境:
-
安装Rust:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -
安装Trunk(Wasm应用打包工具):
cargo install trunk -
创建新项目:
cargo new leptos-todo-app cd leptos-todo-app -
添加Leptos依赖:
cargo add leptos --features=csr,nightly -
切换到nightly版本Rust:
rustup toolchain install nightly rustup override set nightly
项目结构
创建以下文件结构:
.
├── Cargo.toml
├── index.html
└── src
└── main.rs
编写代码
现在,让我们开始编写一个简单的待办事项应用。
在src/main.rs中添加以下代码:
use leptos::*;
#[component]
fn App() -> impl IntoView {
let (todos, set_todos) = create_signal(vec![]);
view! {
<div class="todo-app">
<h1>"待办事项应用"</h1>
<TodoInput set_todos={set_todos} />
<TodoList todos={todos} set_todos={set_todos} />
</div>
}
}
#[component]
fn TodoInput(set_todos: WriteSignal<Vec<String>>) -> impl IntoView {
let (new_todo, set_new_todo) = create_signal(String::new());
let add_todo = move |_| {
set_todos.update(|todos| todos.push(new_todo.get()));
set_new_todo.set(String::new());
};
view! {
<div>
<input
type="text"
on:input=move |ev| set_new_todo.set(event_target_value(&ev))
prop:value=new_todo
/>
<button on:click=add_todo>"添加"</button>
</div>
}
}
#[component]
fn TodoList(
todos: ReadSignal<Vec<String>>,
set_todos: WriteSignal<Vec<String>>
) -> impl IntoView {
let remove_todo = move |index: usize| {
set_todos.update(|todos| { todos.remove(index); });
};
view! {
<ul>
<For
each=move || todos.get()
key=|todo| todo.clone()
children=move |todo| {
view! {
<li>
{todo}
<button on:click=move |_| remove_todo(todos.get().iter().position(|t| t == &todo).unwrap())>
"删除"
</button>
</li>
}
}
/>
</ul>
}
}
fn main() {
mount_to_body(App);
}
运行应用
- 创建
index.html文件:
<!DOCTYPE html>
<html>
<head>
<title>Leptos待办事项应用</title>
</head>
<body></body>
</html>
- 使用Trunk运行应用:
trunk serve
- 在浏览器中访问
http://localhost:8080查看应用。
这个简单的教程展示了如何使用Leptos框架创建一个基本的待办事项应用。它包括添加新待办事项、显示待办事项列表以及删除待办事项的功能。Leptos的反应式编程模型使得创建交互式UI变得简单高效。
随着您对Leptos的深入了解,您可以进一步探索其他高级特性,如服务器端渲染(SSR)、同构服务器函数等,以构建更复杂和强大的web应用程序。