刷刷题19(微信小程序)

299 阅读2分钟

1. 小程序生命周期顺序

==‌问题‌==:冷启动时,AppPage生命周期如何触发?
==‌答案‌==:

  • App.onLaunchApp.onShowPage.onLoadPage.onShowPage.onReady
  • ==‌注意‌==:热启动(后台切前台)仅触发App.onShowPage.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或官方createStore API

7. 降低首屏加载时间的方法

==‌问题‌==:如何优化小程序启动性能?
==‌答案‌==:

  • ==‌必做项‌==:
    1. 开启分包加载(主包≤2MB)
    2. 静态资源走CDN
    3. 使用初始渲染缓存("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. 页面白屏可能由哪些原因引起?

  • ==‌优先级排查‌==:
    1. 检查app.json中页面路径是否正确
    1. 确认onLoad生命周期中是否有未捕获的异常
    1. 网络请求超时导致数据未渲染