10分钟上手Tinro:Svelte应用路由快速实现教程
【免费下载链接】tinroHighly declarative, tiny, dependency free router for Svelte's web applications.项目地址: https://gitcode.com/gh_mirrors/ti/tinro
Tinro是一款高度声明式、超轻量级且无依赖的Svelte应用路由工具,让开发者能够快速实现Web应用的路由功能。本教程将带你在10分钟内掌握Tinro的核心用法,轻松构建Svelte单页应用的路由系统。
🌟 为什么选择Tinro?
Tinro作为Svelte生态中的轻量级路由解决方案,具有以下优势:
- 极简设计:仅需一个
<Route>组件即可声明路由 - 原生体验:使用标准
<a>标签作为链接,无需特殊组件 - 多种导航模式:支持History API、Hash模式和内存导航
- 零依赖:体积小巧,bundle size仅为极小值
- 灵活嵌套:轻松实现复杂的路由层次结构
🚀 快速安装步骤
在Svelte项目中安装Tinro非常简单,只需执行以下命令:
$ npm i -D tinro如果你是从GitHub仓库克隆项目,可以使用以下命令:
$ git clone https://gitcode.com/gh_mirrors/ti/tinro $ cd tinro $ npm install🔰 基础路由配置
Tinro的使用极为直观,下面是一个基本的路由配置示例:
<!-- App.svelte --> <script> import {Route} from 'tinro'; import Home from './pages/Home.svelte'; import About from './pages/About.svelte'; import Contact from './pages/Contact.svelte'; </script> <nav> <a href="/">首页</a> <a href="/about">关于我们</a> <a href="/contact">联系我们</a> </nav> <Route path="/"><Home /></Route> <Route path="/about"><About /></Route> <Route path="/contact"><Contact /></Route>只需导入Route组件并为每个页面定义路由规则,即可实现基本的页面导航功能。
🔗 链接与激活状态
Tinro使用原生<a>标签作为链接,无需额外学习特殊组件。要为当前活动链接添加样式,可以使用active指令:
<script> import {active} from 'tinro'; </script> <!-- 普通用法:匹配当前路径及其子路径时添加active类 --> <a href="/about" use:active>关于我们</a> <!-- 精确匹配:仅当URL完全匹配时添加active类 --> <a href="/contact" use:active exact>联系我们</a> <!-- 自定义激活类名 --> <a href="/home" use:active active-class="current-page">首页</a>📁 嵌套路由实现
Tinro支持通过非精确路径(以/*结尾)创建嵌套路由,这对于构建复杂应用结构非常有用:
<Route path="/portfolio/*"> <h1>我的作品集</h1> <nav> <a href="/portfolio/websites">网站作品</a> <a href="/portfolio/graphics">图形设计</a> </nav> <!-- 嵌套路由 --> <Route path="/websites"> <h2>网站作品展示</h2> <!-- 网站作品内容 --> </Route> <Route path="/graphics"> <h2>图形设计作品</h2> <!-- 图形设计内容 --> </Route> <!-- 嵌套路由的 fallback --> <Route fallback> <p>请选择作品集类别</p> </Route> </Route>🔄 路由重定向与Fallback
处理404页面和页面重定向非常简单:
<!-- 精确重定向 --> <Route path="/old-page" redirect="/new-page" /> <!-- 带参数的重定向 --> <Route path="/user/:id" redirect="/profile/:id" /> <!-- 404 Fallback页面 --> <Route fallback> <div class="not-found"> <h1>404 - 页面未找到</h1> <a href="/">返回首页</a> </div> </Route>⚙️ 路由元数据与参数
通过meta对象可以获取路由相关信息和参数:
<Route path="/user/:username" let:meta> <h1>欢迎来到 {meta.params.username} 的个人主页</h1> <p>当前URL: {meta.url}</p> <p>查询参数: {JSON.stringify(meta.query)}</p> </Route>你也可以在组件内部通过导入meta函数获取路由信息:
<script> import {meta} from 'tinro'; const route = meta(); </script> <p>当前路径: {$route.path}</p>🧩 导航模式设置
Tinro支持三种导航模式,可在应用入口文件中配置:
<!-- App.svelte --> <script> import {router} from 'tinro'; // 默认使用History API模式 // router.mode.history(); // 或使用Hash模式 // router.mode.hash(); // 或使用内存模式(适用于非浏览器环境) // router.mode.memory(); </script>对于History API模式,在生产环境需要服务器配置支持。如果使用官方Svelte模板,只需修改package.json中的启动脚本:
"start": "sirv public --single"💡 实用路由技巧
滚动到顶部
导航时自动滚动到页面顶部:
import {router} from 'tinro'; router.subscribe(_ => window.scrollTo(0, 0));路由守卫
通过简单的条件判断实现路由守卫功能:
{#if user.isAuthenticated} <Route path="/dashboard">用户仪表盘</Route> {:else} <Route path="/dashboard" redirect="/login" /> {/if}延迟加载组件
实现组件的懒加载以优化性能:
<!-- Lazy.svelte --> <script> export let component; </script> {#await component()} <p>加载中...</p> {:then Cmp} <svelte:component this={Cmp.default} /> {/await} <!-- 使用方式 --> <Route path="/large-page"> <Lazy component={() => import('./LargePage.svelte')} /> </Route>🎯 总结
Tinro为Svelte应用提供了简洁而强大的路由解决方案,通过本教程,你已经掌握了从安装到高级用法的全部知识。无论是构建简单的个人网站还是复杂的企业应用,Tinro都能满足你的路由需求,同时保持代码的简洁和应用的轻量。
现在就开始使用Tinro构建你的Svelte应用吧!更多高级用法和API详情,请参考项目的README.md文档。
【免费下载链接】tinroHighly declarative, tiny, dependency free router for Svelte's web applications.项目地址: https://gitcode.com/gh_mirrors/ti/tinro
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考