文章图片
作为一个还算得上策划的策划 , 其实经常还是会有很多想法冒出来的 , 一部分会因为自己简单浅薄的可行性评估淘汰 , 另一部分则会被能力和精力所打败 。
这不 , 昨天是新年的第一天 , 起床就在想新年是不是该有点什么新气象?新?要不就看看有什么新鲜事 。
好家伙 , 哪怕只想了解最核心的 , 也要去几个网站和App才行 。 那我自己能不能统一到一个地方看呢?要不就做个网站或者小程序吧 。 做饭的时候一边查资料一边整理思路 。 本来是打算用爬虫来实现的 , 这样数据也很可控 。 但是转念一想 , 如果有现成api岂不是更快?
结果还真能找到一些 , 虽然实际上离我的需求还有点距离 , 但不管怎样 , 先把东西做出来看有没有用 , 如果真的可用再快速迭代 。
选型这个阶段没花什么功夫 , UniApp
直接就被选中 , 主要是可用的插件库很丰富 , 对 'node modules' 的支持也是很不错的 。
插件选择依赖也没花太多时间 。 之前就在跟李嘉吐槽 , 有个项目在插件搭配上很糟心 , 总想着用一些看起来好像很酷炫的东西 , 但其实背后结构和设计思路一团糟 。 这次的ui库直接用 uni-ui
, 网络库直接用 axios
, 确保最快最稳的开发出来 。
PS:有个小插曲 , 直接 npm install axios --save
安装最新的版本是跟 uniapp 不兼容的 , 一定要用 ^0.27.2
版本才行 。
其他方面 , 布局方面用到了 limm-windi-css-uniapp, 图片懒加载用到了 zero-lazy-load 。 还有一些日期、转换类的js小工具就用的自己以前建起来的私人类库 。
搭建网络先给 axios
安排上适配器和拦截器 。
1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132 | // utils/http.jsimport Vue from 'vue'import axios from 'axios'axios.defaults.adapter = function(config) { // ...const service = axios.create({ // ...)service.interceptors.request.use( config => { // ... returnconfig; error => { // ... returnPromise.reject(error); ); service.interceptors.response.use(res => { // ... returnres.data; error => { // ... returnPromise.reject(error);)exportdefault service |
123456 | // utils/api.jsimport service from './http.js'exportfunctionbaiduTrendApi(data) { // ... |
vuex
和 storage
来解决数据缓存 。1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637383940414243 | // store/index.jsimport Vue from 'vue'import Vuex from 'vuex'Vue.use(Vuex)const cacheNameList = [\"baiduTrend\" \"...\" ;const cacheTime = 3 * 60 * 60 * 1000;const store = new Vuex.Store({ state: { \tbaiduTrend: null // {content time mutations: { \tsetHotData(state data) { \t\tif (data) { \t\t\tif(data.content && typeof data.content == 'string'){ \t\t\t\tdata.content = tools.toHttps(data.content); data.content = tools.fixObjStr(data.content); \t\t\t\tdata.content = decodeURIComponent(data.content); \t\t\t\tdata.content = JSON.parse(data.content); \t\t\t \t\t\tif(data.type == 'baidu'){ \t\t\t\tstate.baiduTrend = {content:data.content time:new Date().getTime(); \t\t\t\tuni.setStorageSync('baiduTrend' state.baiduTrend); \t\t\t \t\t \t \tgetHotData(state){ \t\tfor (letname of cacheNameList) { \t\t\tletdata = https://mparticle.uc.cn/api/uni.getStorageSync(name); /t/t/tif (data) { /t/t/t/tlet time = data.time; /t/t/t/ttime = time || 0; /t/t/t/tletcurrent = new Date().getTime(); /t/t/t/tif(current - time < cacheTime) return; /t/t/t/tstate[name = data; \t\t\t \t\t \t )exportdefault store |