UniApp跨平台解决方案
1. 平台兼容性处理
Android
iOS
小程序
H5
// 条件编译
// #ifdef APP-PLUS
console.log('App环境');
// #endif
// #ifdef MP-WEIXIN
console.log('微信小程序环境');
// #endif
// #ifdef H5
console.log('H5环境');
// #endif
2. 性能优化实践
首屏加载优化
// 页面预加载
onLoad() {
// 预加载下一页数据
uni.preloadPage({
url: '/pages/detail/detail'
});
}
// 图片懒加载
// 分包加载
{
"subPackages": [{
"root": "pages/detail",
"pages": [{
"path": "detail",
"style": { ... }
}]
}]
}
常见性能问题
- 页面切换白屏
- 长列表卡顿
- 图片加载闪烁
- 网络请求超时
3. 组件封装技巧
自定义组件示例
{{ item.title }}
{{ item.desc }}
4. 实用解决方案
4.1 网络请求封装
// request.js
const request = (options = {}) => {
return new Promise((resolve, reject) => {
uni.request({
url: baseUrl + options.url,
method: options.method || 'GET',
data: options.data,
header: getHeader(),
success: (res) => {
if (res.statusCode === 200) {
resolve(res.data);
} else {
handleError(res);
reject(res);
}
},
fail: (err) => {
handleError(err);
reject(err);
}
});
});
}
4.2 状态管理
// store/index.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
state: {
userInfo: null,
token: uni.getStorageSync('token')
},
mutations: {
SET_USER_INFO(state, userInfo) {
state.userInfo = userInfo;
uni.setStorageSync('userInfo', userInfo);
}
},
actions: {
async login({ commit }, params) {
const result = await request({
url: '/api/login',
method: 'POST',
data: params
});
commit('SET_USER_INFO', result.data);
return result;
}
}
})