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

完整教程:Vue-github 用户搜索案例

一、前言

还在学 Vue 的基础语法?学完 v-modelv-forv-if 却不知道如何整合成一个完整项目?

别担心!本文带你从零开始,用 2 小时完成一个真实的 Vue 项目 —— GitHub 用户搜索系统

✅ 你将学到:

  • 如何使用 axios 发送网络请求
  • 组件化开发与父子/兄弟组件通信
  • 使用 全局事件总线(Global Event Bus) 实现跨组件数据传递
  • 处理加载状态与错误提示
  • 项目结构组织与代码规范

本项目不依赖 Vue Router 或 Vuex,纯原生 Vue + Axios,适合初学者快速上手!

二、项目演示

功能说明:

  • 输入用户名关键词,点击搜索
  • 显示加载中动画
  • 展示用户头像、用户名、主页链接
  • 支持点击头像跳转到 GitHub 主页
  • 搜索失败时显示错误信息
  • 初始页面显示欢迎语

三、涉及知识点

知识点说明
Vue 基础模板语法、v-model、v-for、v-show、生命周期
Axios发送 HTTP 请求获取 GitHub 用户数据
全局事件总线实现 Search 与 List 组件通信
组件化开发拆分为 App.vueSearch.vueList.vue
GitHub Open API免费接口,无需认证

四、项目准备

1. 创建 Vue 项目

# 使用 Vue CLI(Vue 2)
vue create github-search
# 或使用 Vite(Vue 3)
npm create vue@latest github-search

本文以 Vue 2 + Vue CLI 为例,Vue 3 写法类似。


2. 安装依赖

# 安装 axios(发送请求)
npm install axios
# 可选:安装 bootstrap 美化界面
npm install bootstrap

3. 引入 Bootstrap(可选)

main.js 中引入:

import 'bootstrap/dist/css/bootstrap.css'

五、项目结构

src/
├── App.vue
├── components/
│   ├── Search.vue      # 搜索组件
│   └── List.vue        # 列表展示组件
├── eventBus.js         # 全局事件总线
└── main.js

六、核心代码实现

1. 创建全局事件总线 eventBus.js

// src/eventBus.js
import Vue from 'vue'
export default new Vue()

作用:作为“中转站”,实现兄弟组件通信。


2. App.vue —— 父组件(整合子组件)


<script>
import Search from './components/Search.vue'
import List from './components/List.vue'
export default {name: 'App',components: {Search,List}
}
</script>

3. Search.vue —— 搜索组件(发送请求)


<script>
import axios from 'axios'
import eventBus from '../eventBus'
export default {name: 'Search',data() {return {keyWord: '' // 搜索关键词}},methods: {searchUsers() {// 1. 搜索前:通知 List 组件更新状态(加载中)eventBus.$emit('updateList', {isFirst: false,isLoading: true,errMsg: '',users: []})// 2. 发送请求const url = `https://api.github.com/search/users?q=${this.keyWord}`axios.get(url).then(response => {// 请求成功const users = response.data.itemseventBus.$emit('updateList', {isLoading: false,users})}).catch(error => {// 请求失败eventBus.$emit('updateList', {isLoading: false,errMsg: error.message})})}}
}
</script>

4. List.vue —— 列表组件(展示数据)


<script>
import eventBus from '../eventBus'
export default {name: 'List',data() {return {info: {isFirst: true,     // 是否为初始状态isLoading: false,  // 是否正在加载errMsg: '',        // 错误信息users: []          // 用户列表}}},mounted() {// 接收 Search 组件发送的数据eventBus.$on('updateList', (data) => {// 合并对象this.info = { ...this.info, ...data }})},// 组件销毁前解绑事件,防止内存泄漏beforeDestroy() {eventBus.$off('updateList')}
}
</script>

七、运行项目

npm run serve

访问 http://localhost:8080,输入用户名如 tomjohn,即可看到搜索结果!

八、常见问题与优化建议

❌ 问题 1:事件总线未解绑导致内存泄漏?

解决:在 beforeDestroy 中使用 $off 解绑:

beforeDestroy() {eventBus.$off('updateList')
}

❌ 问题 2:输入框回车搜索?

✅ 已在 v-model 上添加 @keyup.enter="searchUsers",支持回车触发。


✅ 优化建议

优化点说明
防抖处理频繁输入时可添加 lodash.debounce 防抖
图片懒加载安装 vue-lazyload 插件,提升性能
错误重试增加重试按钮,提升用户体验
样式美化使用 Element UI / Ant Design Vue 提升 UI

九、扩展:Vue 3 写法差异(Composition API)

如果你使用 Vue 3 + setupList.vue 可改为:

import { onMounted, onBeforeUnmount } from 'vue'
export default {setup() {const info = reactive({isFirst: true,isLoading: false,errMsg: '',users: []})onMounted(() => {eventBus.on('updateList', (data) => {Object.assign(info, data)})})onBeforeUnmount(() => {eventBus.off('updateList')})return { info }}
}

十、总结

组件职责
App.vue整合组件,搭建页面结构
Search.vue用户输入、发送请求、通知状态
List.vue接收数据、展示列表、处理 UI 状态
eventBus.js兄弟组件通信桥梁

项目收获

  • 掌握了 Vue 组件化开发流程
  • 学会了使用 Axios 请求数据
  • 理解了全局事件总线的通信机制
  • 提升了错误处理与用户体验意识

十一、结语

感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!

http://www.hn-smt.com/news/78856/

相关文章:

  • 河北保定徐水区农村自建房公司实力TOP6排行榜。2026年徐水区自建房公司权威测评优选。
  • 2025成都口碑最好的留学机构是哪家
  • 2025年河南省护栏制造商口碑排名:护栏厂家哪家好
  • 2025年电能质量在线监测装置说明书厂商权威榜单:简易电能质量监测装置/数字式电能质量监测装置/电能质量在线监测装置服务精选
  • 2025年12月潜水混流泵哪家强最新榜单:潜油电泵/深井泵/潜水泵/污水泵哪家强与售后响应核心优势!
  • 2025年十大全自动膏药机正规厂家排行榜,新测评精选全自动膏
  • WPS批量转换doc到docx
  • VSCode编程插件Cline教程(超详细):安装、配置、使用教程、常见使用示例
  • 2025年12月选矿设备厂家推荐排行榜:五家优质企业综合对比分析
  • 2025年12月成都垃圾清运公司推荐排行榜单深度对比与实用选择指南
  • 2025年12月选矿设备厂家综合评测排行:多维度对比分析助您精准选择
  • 2025年面膜选购指南:针对夏季晒后与秋冬换季的强力补水舒缓修复面膜品牌推荐
  • 2025年12月加拿大海参品牌推荐排行榜:五款高性价比野生海参深度对比与选购指南
  • 2025最新电锅炉品牌推荐!国内优质电锅炉企业权威榜单发布,资质技术双优助力绿色供暖设备选择
  • Apache Log4j特征及漏洞复现
  • 泛微OA系统特征及漏洞探测利用
  • 通达OA系统特征及漏洞探测利用
  • 2025年河北尼龙垫板认证厂家十大排行榜,专业供应商批量定制
  • 多线程环境下,线程安全单例模式的方案避坑 - 详解
  • 2025合肥出国留学机构哪家好
  • 2025比较靠谱的英国留学中介
  • 用友NC系统特征及漏洞探测利用
  • 2025杭州出国留学机构哪家好一点的
  • 2025年绝热高效空冷器批发厂家权威推荐榜单:蒸发式冷凝器‌/横流式闭式冷却塔设备‌/v型空冷器‌源头厂家精选
  • 2025年口碑好的圆盘过滤机厂家推荐及选择参考
  • 2025年比较好的智能爬杆挂面机厂家最新用户好评榜
  • 可靠的展厅装修有哪些?河南卓鼎经验丰富
  • 售后完善的展厅设计企业TOP5权威推荐:甄选机构助力文化空间
  • 毕业论文神器!9款免费AI写论文工具实测,轻松过查重!
  • 2025 年 12 月 GEO 优化口碑推荐榜单