JS实现一个完整的单页应用(SPA)_j*ascript实战


答案:用原生 J*aScript 可实现 SPA,核心包括路由管理、视图切换、数据绑定和组件化。通过 History API 监听 URL 变化,定义路由表 routes,匹配路径并渲染对应内容;利用 popstate 事件处理浏览器前进后退;拦截 a 标签点击事件,调用 preventDefault() 阻止默认跳转,使用 pushState 更新 URL 并触发 n*igate 函数渲染新视图;将页面封装为返回 HTML 字符串的组件函数,提升可维护性;通过全局 store 对象实现简易状态管理,支持跨页面数据共享,并借助自定义事件“statechange”通知视图更新。此方案无需框架即可完成局部更新、异步加载与动态导航。

JS实现一个完整的单页应用(SPA)_javascript实战

实现一个完整的单页应用(SPA)并不需要依赖框架,用原生 J*aScript 也能完成。核心在于:路由管理、视图切换、数据绑定和组件化思想。下面一步步带你用纯 JS 实现一个简易但功能完整的 SPA。

1. 路由系统:基于 URL 的动态加载

SPA 的关键特征是不刷新页面切换视图,这依赖前端路由。我们使用 History API 来监听 URL 变化并渲染对应内容。

定义一个简单的路由表: const routes = { 'https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712': '

首页

欢迎来到主页', 'https:https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712www.php.cnhttps://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712linkhttps://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712387634a1c9e6dad2026967f0a0f844f6': '

关于

这是一个用原生 JS 实现的 SPA 示例', 'https:https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712www.php.cnhttps://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712linkhttps://www.php.cn/link/29a9f8c8460e5e2be4edde557fd8371280b7b0e690b99b5246e4b11990fb8184': async () => { https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712 模拟异步加载用户数据 const res = await fetch('https:https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712jsonplaceholder.typicode.comhttps:https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712www.php.cnhttps://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712linkhttps://www.php.cn/link/29a9f8c8460e5e2be4edde557fd8371280b7b0e690b99b5246e4b11990fb8184shttps://www.php.cn/link/29a9f8c8460e5e2be4edde557fd837121'); const user = await res.json(); return `

用户信息

姓名: ${user.name}

邮箱: ${user.email}`; } };

创建路由跳转与渲染函数: function n*igate() { const path = window.location.pathname; const route = routes[path]; if (!route) { return render('

404

页面未找到'); } if (typeof route === 'function') { route().then(content => render(content)); } else { render(route); } } function render(content) { document.getElementById('app').innerHTML = content; }

监听浏览器前进后退事件: window.addEventListener('popstate', n*igate);

2. 导航链接拦截:避免页面刷新

为了让点击链接时不刷新页面,我们需要拦截所有内部链接的默认行为。

在 DOM 加载完成后绑定事件: document.addEventListener('DOMContentLoaded', function() { https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712 初始化当前页面 n*igate(); https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712 拦截所有 a 标签 document.addEventListener('click', e => { if (e.target.tagName === 'A' && e.target.href.startsWith(window.location.origin)) { e.preventDefault(); const href = e.target.getAttribute('href'); window.history.pushState({}, '', href); https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712 更新 URL n*igate(); https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712 手动触发路由 } }); });

3. 动态视图更新与组件化结构

我们可以将每个页面封装成“组件”函数,返回 HTML 字符串或 Promise。 function HomePage() { return `

? 首页

点击下方链接查看其他页面

  • 关于
  • 用户信息 `; } function AboutPage() { return `

    ℹ️ 关于

    这个 SPA 使用纯 J*aScript 构建,无任何框架。返回首页 `; }

    然后在路由表中使用这些组件: const routes = { 'https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712': HomePage(), 'https:https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712www.php.cnhttps://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712linkhttps://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712387634a1c9e6dad2026967f0a0f844f6': AboutPage(), 'https:https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712www.php.cnhttps://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712linkhttps://www.php.cn/link/29a9f8c8460e5e2be4edde557fd8371280b7b0e690b99b5246e4b11990fb8184': async () => { https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712 ... 用户数据请求 } };

    4. 简易状态管理(可选扩展)

    如果需要跨页面共享数据,可以创建一个简单的状态对象和订阅机制。 const store = { user: null, setState(newState) { Object.assign(this, newState); https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712 触发视图更新(可结合事件) document.dispatchEvent(new Event('statechange')); } }; https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712https://www.php.cn/link/29a9f8c8460e5e2be4edde557fd83712 在需要的地方监听状态变化 document.addEventListener('statechange', () => { console.log('状态已更新:', store); });

    基本上就这些。你已经有了一个具备路由、视图切换、异步加载和基本结构的 SPA。实际项目中可进一步封装成类或模块,加入懒加载、中间件、动画过渡等特性。核心思想不变:控制 URL,响应变化,局部更新 DOM。

    weenCompany闻名企业网站系统5.3.0 繁体中英文 UTF8 weenCompany闻名企业网站系统5.3.0 繁体中英文 UTF8

    weenCompany闻名企业网站系统(免费开源)是一个功能强大, 使用简单的中英文企业智能建站系统, 您只需要一些基本的计算机知识就可以利用此系统完成中小型企业网站的建设; 是低成本企业网站架设方案之首选CMS系统, 也适合建设个人网站。weenCompany闻名企业网站系统功能:1. 程序代码简洁严谨, 整个系统程序仅2M左右大小.2. 中英文双语版共用一套网站程序, 双语页面实现自由切换.3

    weenCompany闻名企业网站系统5.3.0 繁体中英文 UTF8 0 查看详情 weenCompany闻名企业网站系统5.3.0 繁体中英文 UTF8

以上就是JS实现一个完整的单页应用(SPA)_j*ascript实战的详细内容,更多请关注其它相关文章!


# 商场论坛营销推广策略  # 首页  # 有什么  # 绑定  # 路由表  # 跳转  # 源代码  # 江口网站建设  # 网络科技公司网站建设  # 加载  # seo有得分没推广  # 深圳出名的seo公司  # 赤峰seo招聘  # 昆明精准营销推广  # 慈溪外贸网站优化  # 免费建设商城网站  # 菜品的营销推广方式  # ai  # java  # html  # js  # 前端  # json  # 浏览器  # app  # 懒加载  # javascript  # 路由  # win  # 邮箱  # 异步加  # 企业网站的建设  # 建设个人网站  # 企业网站 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: Vue 3中独立响应式实例的创建与应用  如何快速去除厨房重油污? 2025年最好用的厨房清洁剂推荐  win11怎么启用或禁用休眠 Win11 powercfg命令管理休眠文件【技巧】  pubmed数据库官方主页_pubmed学术论文查找官网直达  如何查找哪个composer包引入了特定的依赖?  c++如何实现观察者设计模式_c++行为型设计模式实战  《东方财富》条件单关闭方法  研招网官方网站正版登录网址_中国研究生招生信息网官网首页  《画加》约稿流程  c++类和对象到底是什么_c++面向对象编程基础  追剧达人如何发弹幕  C++ bind函数使用教程_C++参数绑定与函数适配器的应用  抄漫画官网防走失地址_抄漫画最新漫画完整版阅读入口  小红书网页版怎么进 小红书网页版通用入口  VS Code源代码管理(SCM)视图的进阶使用技巧  《暗黑破坏神4》国服回归送狂欢礼包 价值6916元  英国搜索:多数英国人认为语言搜索是未来搜索  J*aScript二进制处理_ArrayBuffer与Blob  J*aScript实现网页表单实时输入字段比较与验证教程  DeepSeek超全面指南:入门必看  天天漫画2025最新入口 天天漫画永久有效登录入口  《幻兽帕鲁》手游帕鲁捕捉技巧分享  优化Leaflet弹出层图片显示:条件渲染策略  c++如何掌握指针的核心用法_c++指针入门到精通指南  iPhone17Pro如何连接蓝牙耳机_iPhone17Pro蓝牙设备配对与连接方法介绍  GBA模拟器手柄按键设置  如何查询国外邮政编码_国外邮政编码查询的多种有效途径  《爱笔思画x》魔棒工具抠图教程  《糖豆》添加舞曲方法  Flexbox布局中Stencil组件宽度不显示问题解析与:host尺寸控制  vivo手机视频通话美颜怎么设置_vivo视频通话美颜开启方法  谷歌浏览器官网地址整理_谷歌浏览器新版直连2026稳定访问  如何在mysql中设计餐饮点餐系统_mysql点餐系统项目实战  PHP魔术方法__set与__isset:设计考量、性能权衡与静态分析的视角  抖音如何进行蓝V认证 抖音企业号申请所需资料与流程  163邮箱网页版入口 163邮箱在线使用  4399造梦西游3无敌版_4399游戏入口  《猎聘》筛选猎头岗位方法  使用Selenium在无头Chrome中交互动态菜单和复选框的策略  顺丰快递收费标准查询_如何查看顺丰最新收费价格  优化2xN网格最大路径和的动态规划算法实践  全球各国上班时间表外贸邮件时间  Sublime怎么快速复制文件路径_Sublime右键菜单增强技巧  Golang如何使用crypto/md5生成哈希_Golang MD5哈希生成方法  处理含命名空间的XML文件 Power Query中的高级技巧  5G和6G的连接密度有什么区别 6G每平方公里能连接多少设备  《绿竹漫游》关闭消息通知方法  在PySimpleGUI中实现键盘按键绑定按钮事件  百度网盘如何设置上传限额  哈尔滨城市通昵称修改方法 

 2025-11-01

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.