依据 Dioxus 0.7 antipatterns 官方指南,做两件事:
1. 新增 skill .agents/skills/dioxus-render-purity/
把「render 函数必须纯净」做成可复用 skill,列出三类反模式(render 期
副作用 / 用 use_signal 存派生值 / 用 use_effect 算派生值)及自检清单,
防止后续编辑(人或 AI)再次在组件里写 signal.set 等副作用。触发关键词
覆盖 dioxus/component/rsx/signal/use_effect 及对 src/pages、src/components
的编辑。
2. 修复 post_detail.rs 的真实违规(被该 skill 捕获的典型反例):
原代码用 use_signal 镜像 slug prop,再在 render 期 if slug_signal()!=slug
{ slug_signal.set(...) } 触发 server future 重跑——这是文档明确点名的
「don't mutate state during render」。改为直接读 prop:
use_server_future(move || get_post_by_slug(slug.clone())),路由 slug 变化
时 Dioxus 自动重跑 future,无需镜像信号。key 改用 post.slug(post 已在
match 分支内可用,避免 slug 被 move 后再读)。同步更新模块文档注释。
验证:dx check 通过、cargo test 405 passed。
Yggdrasil
基于 Dioxus 0.7 的全栈博客系统,Rust 单一代码库同时编译为 WASM 前端和原生服务端。
技术栈
- 框架: Dioxus 0.7 (fullstack)
- 数据库: PostgreSQL + tokio-postgres
- 样式: Tailwind CSS v4
- 密码: Argon2
- 会话: UUID token + cookie
功能
- 邮箱注册 / 登录(单管理员模式,首次注册后关闭)
- 会话管理与自动过期清理
- 暗色 / 亮色主题切换
- 后台文章撰写(Tiptap Markdown 编辑器)
- 文章归档与标签浏览
开发
依赖 Rust 1.95+、wasm32 目标、dx CLI、tailwindcss CLI v4 和 PostgreSQL。
# 配置数据库
DATABASE_URL=postgres://postgres:postgres@localhost:5432/yggdrasil
# 运行迁移(自动创建数据库并按顺序执行 migrations/ 下所有 SQL)
./migrate.sh
# 启动开发服务器
make dev
构建
make build
Description
Languages
Rust
77.4%
TypeScript
17.2%
CSS
3.3%
Dockerfile
0.9%
Makefile
0.6%
Other
0.6%