1. 小程序生命周期顺序
==问题==:冷启动时,App和Page生命周期如何触发?
==答案==:
App.onLaunch→App.onShow→Page.onLoad→Page.onShow→Page.onReady- ==注意==:热启动(后台切前台)仅触发
App.onShow和Page.onShow
2. 数据绑定的限制与解决方案
==问题==:直接修改数组下标或对象属性,页面不更新怎么办?
==答案==:
- 使用
this.setData显式更新(Vue风格的响应式无效):// ❌ 错误写法 this.data.list = 100; // ✅ 正确写法 const key = `list`; this.setData({ [key]: 100 });
3. 路由跳转的三种方式
==‌**问题**‌==:`wx.navigateTo`、`wx.redirectTo`、`wx.switchTab`的区别?
==‌**答案**‌==:
| 方法 | 特点 |
|---------------------|-----------------------------------|
| `wx.navigateTo` | 保留当前页面,新页面入栈 |
| `wx.redirectTo` | 关闭当前页面,新页面入栈 |
| `wx.switchTab` | 跳转至Tab页,清除非Tab页面栈 |
4. 本地存储的同步与异步选择
==问题==:什么场景下用wx.setStorageSync而非异步API?
==答案==:
- ==同步API==:需立即获取结果的场景(如启动时读取Token)
- ==异步API==:主线程耗时操作可能阻塞渲染时使用(如存储大型数据)
5. 自定义组件通信方案
==问题==:父子组件如何传递数据和事件?
==答案==:
- ==父 → 子==:通过
properties传递数据 - ==子 → 父==:使用
this.triggerEvent('event', data)触发父组件事件
6. 全局状态管理方案
==问题==:如何在小程序中实现跨页面状态共享?
==答案==:
- ==简单场景==:使用
getApp().globalData - ==复杂场景==:集成
MobX-miniprogram或官方createStoreAPI
7. 降低首屏加载时间的方法
==问题==:如何优化小程序启动性能?
==答案==:
- ==必做项==:
- 开启分包加载(主包≤2MB)
- 静态资源走CDN
- 使用初始渲染缓存(
"initialRenderingCache": "static")
8. setData的正确使用姿势
==问题==:为什么频繁调用setData会导致页面卡顿?
==答案==:
- ==底层机制==:
setData会触发视图层与逻辑层通信(跨线程) - ==优化方案==:合并数据更新,单次调用传输数据≤256KB
// ❌ 避免多次调用 this.setData({ a: 1 }); this.setData({ b: 2 }); // ✅ 合并更新 this.setData({ a: 1, b: 2 });
9. 用户授权拒绝处理
==问题==:用户拒绝授权后,如何引导重新授权?
==答案==:
wx.getSetting({
success(res) {
if (!res.authSetting['scope.userInfo']) {
wx.showModal({
title: '提示',
content: '需授权才能使用功能',
success: (res) => {
if (res.confirm) wx.openSetting();
}
});
}
}
});
10. 页面白屏可能由哪些原因引起?
- ==优先级排查==:
-
- 检查
app.json中页面路径是否正确
- 检查
-
- 确认
onLoad生命周期中是否有未捕获的异常
- 确认
-
- 网络请求超时导致数据未渲染