当前位置: 首页 > news >正文

dagger.js 实现嵌套路由导航:对比 React Router 的另一种思路

在这里插入图片描述

前端开发这几年,大家常常陷入一个悖论:
我们想写一个简单的 Demo 或原型,却不得不从
npm installvite.config.js、再到一大堆依赖配置开始。
明明只是一个路由跳转的功能,为什么要把整条构建流水线搬上来?

React Router、Vue Router 功能强大,但也都依赖庞大的生态和编译环境。
dagger.js
选择了另一条路:直接运行在浏览器,零构建,纯运行时

这篇文章,我们就通过一个 CodePen 示例,看看 dagger
路由是如何实现嵌套导航的,并与 React Router 做一个对比。


示例概览

这份示例实现了一个小型的"球员名册"应用:

  • 首页 Home
  • 球员列表 Roster
  • 球员详情 Player/:number
  • 比赛日程 Schedule

整个路由和视图关系如下:

/home        -> Home
/roster      -> Roster 列表
/roster/:id  -> 球员详情
/schedule    -> Schedule

核心亮点在于:
所有路由声明都在 JSON 中完成,不依赖 JSX 或编译。


dagger 路由的写法

  1. 定义路由表
<script type="dagger/routers">
{"default": "/home","routing": {"children": [{ "path": "home", "constants": { "view1": "home" }, "modules": ["home"] },{"path": "roster","tailable": true,"constants": { "view1": "roster", "view2": "full__Roster" },"modules": ["roster"],"children": [{"path": ":number","constants": { "view2": "player" },"modules": ["player"]}]},{ "path": "schedule", "constants": { "view1": "schedule" }, "modules": ["schedule"] }]}
}
</script>
  • default:默认路由\
  • tailable: true:允许继续追加子路由
  • :number:动态参数,可通过 $route.params.number 读取
  • constants.view1/view2:告诉视图占位符该渲染哪个模板

  1. 模块映射
<script type="dagger/modules">
{"home": "#home","roster": "#roster","fullRoster": "#fullRoster","player": "#player","schedule": "#schedule"
}
</script>

模块与 <template> 的映射,类似于 React Router 里的
Route -> Component


  1. 视图占位符
<main dg-cloak><template *html="$route.constants.view1"></template>
</main><template id="roster"><template *html="$route.constants.view2"></template>
</template>
  • $route.constants.view1 渲染一级页面\
  • $route.constants.view2 用来渲染嵌套子页面

  1. 导航和参数
<li *each="PlayerAPI.all()"><a *href="`roster/${item.number}`">${item.name}</a>
</li><template id="player"><div +load="{ player: PlayerAPI.get($route.params.number) }"><div *exist="player"><h1>${player.name} (#${player.number})</h1></div><div *exist="!player">Sorry, but the player was not found</div></div>
</template>
  • *href 会自动走 SPA 内部跳转,相当于 React Router 的 <Link>\
  • $route.params.number 读取路径参数\
  • +load 生命周期钩子:路由进入时加载数据

与 React Router 对比

方面 dagger.js React Router


路由声明 JSON 配置 + 模板占位 JSX <Route>
嵌套路由 父子节点 + tailable 嵌套 <Route>
参数获取 $route.params useParams()
内部导航 <a *href> <Link>
生命周期 +load 指令 useEffect / 生命周期函数

可以看到,dagger 用"指令 + 模板"的方式,把路由逻辑与渲染解耦。它不需要构建工具,也不需要学习复杂
API。


最小可复用模板

如果你要在项目里快速上手,可以直接复制以下模式:

<script type="dagger/routers">
{"default": "/list","routing": {"children": [{ "path": "list", "constants": { "view": "list" }, "modules": ["list"] },{"path": "detail","tailable": true,"constants": { "view": "detail" },"modules": ["detail"],"children": [{ "path": ":id", "modules": ["detail"] }]}]}
}
</script><script type="dagger/modules">
{"list": "#tpl-list","detail": "#tpl-detail"
}
</script><main dg-cloak><template *html="$route.constants.view"></template>
</main>

总结

React Router 强大,但依赖构建工具和生态。
dagger.js 路由则强调 纯运行时、无构建、0 依赖,尤其适合
Demo、原型、嵌入式应用。

用 JSON 定义路由、用模板做视图占位、用 *href 导航、用 $route.params
取参数 ------ 简单直观。

对于那些希望快速开发、轻量运行的场景,dagger
路由是一个非常值得尝试的选择。


推荐阅读 / 延伸链接

  • 🌐 dagger.js 官网
    – 指令与路由文档\
  • 🎨 CodePen dagger.js 示例合集
    – 官方在线演示
  • 📖 React Router 官方文档 –
    作为对比学习参考
  • 📚 Shoelace Web Components – 可与 dagger
    搭配使用的现代组件库
http://www.dtcms.com/a/395439.html

相关文章:

  • React自定义同步状态Hook
  • 系统架构设计能力
  • 安卓图形系统架构
  • 《ZooKeeper终极指南》
  • 软考 系统架构设计师系列知识点之杂项集萃(154)
  • 算法提升之单调数据结构-单调栈与单调队列
  • 【Linux】初识进程(Ⅰ)
  • VMware登录后没有网络解决方法
  • Infoseek助力品牌公关升级:从成本中心到价值引擎
  • AR 运维系统与 MES、EMA、IoT 系统的融合架构与实践
  • 牛客周赛 Round 110
  • AutoMQ x Lightstreamer: Kafka 金融数据实时分发新方案
  • Vulkan原理到底学什么
  • 第14讲 机器学习的数据结构
  • MATLAB的宽频带频谱感知算法仿真
  • Adobe Fresco下载教程Adobe Fresco 2025保姆级安装步骤(附安装包)
  • MQTT 服务质量 (QoS) 深度解析
  • MySQL EXPLAIN 中的七种 type 类型详解
  • NestJS认识
  • 6.MySQL索引的数据结构【面试题】
  • 【vLLM 最新版v0.10.2】docker运行openai服务与GGUF量化使用方式
  • 鸿蒙开发入门:ArkTS基础与实战
  • #C语言——刷题攻略:牛客编程入门训练(十三):一维数组(二),轻松拿捏!
  • 2.16Vue全家桶-Vuex状态管理
  • 【SSR】SSR 性能问题
  • 《UE教程》第二章第四回——父类蓝图
  • GORM库用法查漏补缺
  • C++11 移动语义与右值
  • FPGA学习笔记——图像处理之对比度调节(直方图均衡化)
  • 如何进行人脸识别