UniApp跨平台开发实战总结

1. 平台兼容性处理

Android

iOS

微信小程序

H5

条件编译


// 样式条件编译
/* #ifdef APP-PLUS */
.app-style {
    flex-direction: row;
}
/* #endif */

/* #ifdef MP-WEIXIN */
.mp-style {
    flex-direction: column;
}
/* #endif */

// JS条件编译
const platform = () => {
    // #ifdef APP-PLUS
    return 'APP'
    // #endif
    
    // #ifdef MP-WEIXIN
    return '微信小程序'
    // #endif
    
    // #ifdef H5
    return 'H5'
    // #endif
}
                        

2. 性能优化实践

2.1 列表优化




    
        
            {{ item.content }}
        
    



                        

性能优化建议

  • 使用分包加载减小主包体积
  • 合理使用图片懒加载
  • 避免频繁的setData操作
  • 使用骨架屏优化首屏加载

3. 常见问题解决方案

3.1 样式兼容


/* 解决小程序和App样式差异 */
.container {
    /* #ifdef MP */
    width: 750rpx;
    /* #endif */
    
    /* #ifdef APP-PLUS */
    width: 100%;
    /* #endif */
}

/* 解决iOS安全区域 */
.safe-area {
    padding-bottom: constant(safe-area-inset-bottom);
    padding-bottom: env(safe-area-inset-bottom);
}
                        

3.2 网络请求封装


// 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. 最佳实践总结

项目结构建议

├── components     // 公共组件
├── pages         // 页面文件
├── static        // 静态资源
├── store         // Vuex状态管理
├── utils         // 工具函数
├── api           // 接口封装
└── platforms     // 平台特定代码
                    

开发建议

  • 使用easycom简化组件引入
  • 合理使用分包和预加载
  • 统一管理接口和状态
  • 注意平台差异性处理
  • 做好错误处理和降级方案