前言
(访问网址chenjinxu.top)二系统在初始的时候定下的首个目标就是使用当前最新的技术,例如vite,ts这样的技术,然后我也确实是使用了这些技术,因此在二系统我踩得坑也是异乎寻常的多就是了.....,还有本项目的链接是:GitHub - RidenShogunei/secend-system-vue-vite-ts: 二系统,功能包括原神星铁文本查询,股票查询,星铁角色查询,已上线chenjinxu.top
正文
总体来说,二系统实现的功能有原神和崩坏星穹铁道的游戏文本查询和星铁的账号查询功能以及股票查询功能, 因此我接下来大体上也会从这几个方面详细说一下完成过程中学到的东西
项目结构
├─ public
│ └─ vite.svg
├─ README.md
├─ src
│ ├─ api
│ │ ├─ genshin.ts
│ │ ├─ starrail.ts
│ │ └─ statrole.ts
│ ├─ App.vue
│ ├─ assets
│ │ └─ vue.svg
│ ├─ components
│ │ ├─ footerPart.vue
│ │ ├─ headerPart.vue
│ │ ├─ menuPart.vue
│ │ └─ waitPage.vue
│ ├─ http
│ │ ├─ newAxios.ts
│ │ └─ request.ts
│ ├─ main.ts
│ ├─ router
│ │ └─ index.ts
│ ├─ store
│ │ └─ index.ts
│ ├─ types
│ │ ├─ auto-imports.d.ts
│ │ └─ components.d.ts
│ ├─ util
│ │ └─ modleTool.ts
│ ├─ view
│ │ ├─ board
│ │ │ ├─ component
│ │ │ └─ index.vue
│ │ ├─ genshin
│ │ │ └─ genshinSearh.vue
│ │ ├─ main.vue
│ │ ├─ starrail
│ │ │ └─ starrailSearch.vue
│ │ ├─ starrailrole
│ │ │ ├─ component
│ │ │ │ ├─ ownShow.vue
│ │ │ │ ├─ roleShow.vue
│ │ │ │ └─ windowShow.vue
│ │ │ └─ index.vue
│ │ └─ stock
│ │ ├─ componment
│ │ │ ├─ describePgae.vue
│ │ │ └─ detilePage.vue
│ │ └─ index.vue
│ └─ vite-env.d.ts
├─ tsconfig.json
├─ tsconfig.node.json
└─ vite.config.ts
项目初始化
因为我实际上是第一次接触vite+ts的组合,所以在项目的初始化部分就遇到了比较大的问题,我可以一个一个来说:
全局声明
有很多东西我想全局声明,例如ref,vuex的usestore函数啥的,因为每个页面都要引入非常的麻烦,所以我上网查到了一个插件unplugin-auto-import,然后我就使用了这个插件,确实非常好用,之后直接使用ref就行了,很不错.
axios拦截判断
这里我是用了axios拦截器,就像下面这样:
// http request拦截器
instance.interceptors.request.use(
config=>{
const token = localStorage.getItem('token');//此处用这个localStorage 也可以用store,因为一般登录后都会将登录信息存储到vuex中,但是如果不存储到localsStorage的话,当前页面刷新时,vuex中的内容会消失。
if(token){
config.headers.authorization = token //请求头加上token
}
return config
},err=>{
return Promise.reject(err);
}
)
进行拦截和判断,当然作为一个比较简单的项目,我基本上是只检测状态码这样的简单检测
动态组件
还有值得一说的就是动态组件的使用,也就是像下面这样的写法:
<a-layout-content class="contentStyle">
<component :is="dynamicComponent"></component>
</a-layout-content>
const dynamicComponent = computed(() => {
switch (store.state.page) {
case '1':
return defineAsyncComponent(() => import('../view/genshin/genshinSearh.vue'))
case '2':
return defineAsyncComponent(() => import('../view/starrail/starrailSearch.vue'))
case '3':
return defineAsyncComponent(() => import('../view/starrailrole/index.vue'))
case '4':
return defineAsyncComponent(() => import('../view/stock/index.vue'))
default:
return defineAsyncComponent(() => import('../components/waitPage.vue'))
}
})
这样写的话就比较简洁,而且也是懒加载的
原神和星铁的文本查询
这个其实前端还行,就是输入输出,主要是数据读入挺麻烦的,原神一共有70多万条数据.....
星铁的账号查询功能
这是调用了网上的api,返回的数据相当的复杂,看了半天挑出了最有用的几个信息,然后展示到页面,感觉做这个功能学到的最多的是vuex的使用和组件的使用...
股票查询功能
这个也是调用网上的api,但是这个api返回的是一个长长的字符串,里面都是我不知道的数据,从这个功能里我学到的最多的就是对于字符串的切割大概,split函数....
坑
其实前面说的差不多了,还有值得一提的大概是ts的使用过程中,对于类型的强要求让我在很多地方定义了interface和使用了any或者unknow,这倒也是一种学习罢.......
结语
二系统前端其实感觉还挺少的就是说......毕竟只做了两天,就草草完成开坑三系统了......