xfy 2498cd9c0b docs(pitfall): 记录反应式 hook 不追踪普通 prop 的陷阱
将本轮三轮调试(commits 79978aa / 1c56fd8 / f86cb48)踩到的同一 Dioxus 0.7
陷阱写入 Pitfall Log,避免后续重复踩坑:

use_server_future / use_resource / use_memo 只在闭包内读取的 signal 变化时
重跑/重算(经 ReactiveContext 订阅)。普通组件 prop(String/i32 等非 signal)
被 move 进闭包后是冻结快照,读取它不建立订阅——prop 变化时 hook 不刷新,
组件虽重渲染但 hook 永久保留首次值。

该陷阱只在「同路由变体间导航」(/post/a → /post/b)触发:复用组件实例、仅
更新 props;跨变体导航会新挂载组件、hook 首次运行,掩盖问题。

记录两个真实案例(路由取数 use_server_future、正文解析 use_memo)的根因与
修复,给出判断规则(signal 依赖安全 / prop 依赖会静默过期 / prop 派生值
优先内联而非 use_memo),并标注 CommentSection 依赖 article key remount
才安全的潜在隐患。
2026-07-09 16:43:33 +08:00
2026-06-29 16:12:18 +08:00

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

生产部署

生产环境必须前置反向代理nginx/Caddy做 TLS 终结,并设置 APP_BASE_URLCOOKIE_SECURE=trueTRUSTED_PROXY_COUNT=1。详见 部署指南

Description
No description provided
Readme 9.4 MiB
Languages
Rust 77.4%
TypeScript 17.2%
CSS 3.3%
Dockerfile 0.9%
Makefile 0.6%
Other 0.6%