小程序实现下拉刷新页面面试题 (前端小程序面试题以及答案)

微信小程序

微信小程序的优劣势?

优势:

1. 无需*载下**,通过搜索和扫一扫就可以打开。

2. 良好的用户体验:打开速度快。

3. 开发成本要比App要低。

4. 安卓上可以添加到桌面,与原生App差不多。

5. 为用户提供良好的安全保障。小程序的发布,微信拥有一套严格的审查流程,不能通过审查的小程序是无法发布到线上的。

劣势:

1. 限制较多。页面大小不能超过2M。不能打开超过5个层级的页面。

2. 样式单一。小程序的部分组件已经是成型的了,样式不可以修改。例如:幻灯片、导航。

3. 推广面窄,不能分享朋友圈,只能通过分享给朋友,附近小程序推广。其中附近小程序也受到微信的限制。

4. 依托于微信,无法开发后台管理功能。

微信小程序与H5的区别?

1. 运行环境的不同

传统的 HTML5 的运行环境是浏览器,包括 webview ,而微信小程序的运行环境并非完整的浏览器,是微信开发团队基于浏览器内核完全重构的一个内置解析器,针对小程序专门做了优化,配合自己定义的开发语言标准,提升了小程序的性能。

2. 开发成本的不同

只在微信中运行,所以不用再去顾虑浏览器兼容性,不用担心生产环境中出现不可预料的奇妙 BUG

3. 获取系统级权限的不同

微信小程序与Vue区别

1. 生命周期不一样,微信小程序生命周期比较简单

2. 数据绑定也不同,微信小程序数据绑定需要使用 {{}},Vue 直接:就可以 显示与隐藏元素, Vue 中,使用 v-if v-show

3. 控制元素的显示和隐藏,小程序中,使用 wx:if hidden 控制元素的显示和隐藏

4. 事件处理不同,小程序中,全用 bindtap(bind+event),或者catchtap(catch+event)绑定事件,Vue:使用v-on:event 绑定事件,或者使用@event绑定事件

5. 数据绑定不一样,在 Vue 中只需要再表单元素上加上 v-model ,然后再绑定 data 中对应的一个值,当表单元素内容发生变化时, data 中对应的值也会相应改变,这是 Vue 非常 nice 的一点。微信小程序必须获取到表单元素,改变的值,然后再把值赋给一个 data 中声明的变量。

小程序的 wxss 和 css 有哪些不一样的地方?

1. wxss 的图片引入需使用外链地址

2. 没有Body ;样式可直接使用 import 导入

简述微信小程序原理

1. 微信小程序采用 JavaScript、WXML、WXSS 三种技术进行开发,本质就是一个单页面应用,所有的页面渲染和事件处理,都在一个页面内进行,但又可以通过微信客户端调用原生的各种接口

2. 微信小程序的架构,是数据驱动的架构模式,它的 UI 和数据是分离的,所有的页面更新,都需要通过对数据的更改来实现

3. 小程序分为两个部分 webview appService 。其中 webview 主要用来展现 UI ,appService 有来处理业务逻辑、数据及接口调用。它们在两个进程中运行,通过系统层 JSBridge 实现通信,实现 UI 的渲染、事件的处理

小程序的生命周期函数

1. onLoad 页面加载时触发。一个页面只会调用一次,可以在 onLoad 的参数中获取打开当前页面路径中的参数

2. onShow() 页面显示/切入前台时触发

3. onReady() 页面初次渲染完成时触发。一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互

4. onHide() 页面隐藏/切入后台时触发。 如 navigateTo 或底部 tab 切换到其他页面,小程序切入后台等

5. onUnload() 页面卸载时触发。如 redirectTo 或 navigateBack 到其他页面时

哪些方法可以用来提高微信小程序的应用速度

1. 提高页面加载速度

2. 用户行为预测

3. 减少默认 data 的大小

4. 组件化方案

怎么解决小程序的异步请求问题

1)小程序支持大部分 ES6 语法

2)在返回成功的回调里面处理逻辑 Promise 异步

如何实现下拉刷新

1. 首先在全局 config 中的 window 配置 enablePullDownRefresh

2. 在 Page 中定义 onPullDownRefresh 钩子函数,到达下拉刷新条件后, 该钩子函数执行, 发起请求方法

3. 请求返回后,调用 wx.stopPullDownRefresh 停止下拉刷新

bindtap和catchtap的区别是什么

1. 相同点:首先他们都是作为点击事件函数,就是点击时触发。在这个作用上他们是一样的,可以不做区分

2. 不同点:他们的不同点主要是 bindtap 是不会阻止冒泡事件的, catchtap 是阻止冒泡的

小程序页面间有哪些传递数据的方法

1. 使用全局变量实现数据传递。在 app.js 文件中定义全局变量 globalData , 将需要存储的信息存放在里面

2. 使用 wx.navigateTo wx.redirectTo 的时候,可以将部分数据放在 url 里面,并在新页面 onLoad 的时候初始化

3. 使用本地缓存 Storage 相关

小程序wxml与标准的html的异同?

相同:

1. 都是用来描述页面的结构;

2. 都由标签、属性等构成;

不同:

1. 标签名字不一样,且小程序标签更少,单一标签更多;

2. 多了一些 wx:if 这样的属性以及 {{ }} 这样的表达式

3. WXML仅能在微信小程序开发者工具中预览,而 HTML 可以在浏览器内预览;

4. 组件封装不同, WXML 对组件进行了重新封装,

5. 小程序运行在 JS Core 内,没有 DOM树 window 对象,小程序中无法使用 window 对象和 document 对象。

小程序简单介绍下三种事件对象的属性列表?

1. 基础事件(BaseEvent)

1) type: 事件类型

2) timeStamp: 事件生成时的时间戳

3) target: 触发事件的组件的属性值集合

4) currentTarget: 当前组件的一些属性集合

2. 自定义事件(CustomEvent)

1) detail

3. 触摸事件(TouchEvent)

1) touches

2) changedTouches

小程序对wx:if 和 hidden使用的理解?

1. wx:if 有更高的切换消耗。

2. hidden 有更高的初始渲染消耗。

因此,如果需要频繁切换的情景下,用 hidden 更好,如果在运行时条件不大可能改变则 wx:if 较好。

app.json 是对当前小程序的全局配置,讲述三个配置各个项的含义?

1. pages字段 —— 用于描述当前小程序所有页面路径,这是为了让微信客户端知道当前你的小程序页面定义在哪个目录。

2. window字段 —— 小程序所有页面的顶部背景颜色,文字颜色定义在这里的

3. tab字段 —小程序全局顶部或底部 tab

小程序onPageScroll方法的使用注意什么?

由于此方法调用频繁,不需要时,可以去掉,不要保留空方法,并且使用 onPageScroll 时,尽量避免使用 setData() ,尽量减少 setData() 的使用频次。

小程序视图渲染结束回调?

使用 setData(data, callback) ,在 callback 回调方法中添加后续操作代码

小程序同步API和异步API使用时注意事项?

wx.setStorageSync 是以Sync结尾的API为同步API,使用时使用 try-catch 来查看异常,如果判定API为异步,可以在其回调方法 success、fail、complete 中进行下一步操作。

简述下 wx.navigateTo(), wx.redirectTo(), wx.switchTab(), wx.navigateBack(), wx.reLaunch()的区别

1. wx.navigateTo(): 保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面

2. wx.redirectTo(): 关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面

3. wx.switchTab(): 跳转到 abBar 页面,并关闭其他所有非 tabBar 页面

4. wx.navigateBack(): 关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages() 获取当前的页面栈,决定需要返回几层

5. wx.reLaunch(): 关闭所有页面,打开到应用内的某个页面

如何封装微信小程序的数据请求的?

1. 将所有的接口放在统一的js文件中并导出。

2. 在 app.js 中创建封装请求数据的方法。

3. 在子页面中调用封装的方法请求数据。

webview中的页面怎么跳回小程序中?

首先要引入最新版的 jweixin-x.x.x.js ,然后

wx.miniProgram.navigateTo({
 url: '/pages/login/login'+'$params'
})

小程序关联微信公众号如何确定用户的唯一性?

使用 wx.getUserInfo 方法 withCredentials true 时 可获取 encryptedData ,里面有 union_id 。后端需要进行对称解密。

小程序调用后台接口遇到哪些问题?

1. 数据的大小有限制,超过范围会直接导致整个小程序崩溃,除非重启小程序;

2. 小程序不可以直接渲染文章内容页这类型的 html 文本内容,若需显示要借助插件,但插件渲染会导致页面加载变慢,所以最好在后台对文章内容的 html 进行过滤,后台直接处理批量替换 p 标签 div 标签为 view 标签,然后其它的标签让插件来做,减轻前端的时间。

webview的页面怎么跳转到小程序导航的页面?

1. 小程序导航的页面可以通过 switchTab ,但默认情况是不会重新加载数据的。若需加载新数据,则在 success 属性中加入以下代码即可:

success: function (e) {
 var page = getCurrentPages().pop();
if (page == undefined || page == null) return;
 page.onLoad();
}

2. webview 的页面,则通过

wx.miniProgram.switchTab({
 url: '/pages/index/index'
})

小程序为什么要分包,如何实现分包

1. 为什么分包: 分包可以避免小程序2M限制,进行页面懒加载提高渲染效率

2. 分包实现:

1) 常规分包: 开发者通过在 app.json subpackages 字段声明项目分包结构, ‘root’为分包的根目录名称,‘pages’分包页面路径,相对于分包根路径

小程序实现下拉刷新页面面试题,微信小程序常问面试题

2) 独立分包: 设置independent为true,独立分包可不用依赖于主包,可单独*载下**,但不能依赖主包资源

小程序实现下拉刷新页面面试题,微信小程序常问面试题

3) 分包预*载下**:

  • – app.json中设置preloadRule选项
  • – key(页面路径): {packages: [预*载下**的包名 || 预*载下**的包的根路径])}

小程序实现下拉刷新页面面试题,微信小程序常问面试题

小程序获取openId流程

1. wx.login()

小程序实现下拉刷新页面面试题,微信小程序常问面试题

2. 发送code给服务器端

3. 服务器端发送请求携带参数(code, appSecret, appId)给微信服务器获取openId

1)接口地址:

4. appSecret,appId在小程序首页获取

小程序实现下拉刷新页面面试题,微信小程序常问面试题

5. 服务器获取openId后进行加密返回给前端

小程序页面通信方式

1. 路由传参

1)传参方式a)路由地址中 + query传参数b)示例: url?a=123

2)获取参数

a)跳转目标页面的onLoad函数中的options实参中获取

小程序实现下拉刷新页面面试题,微信小程序常问面试题

2. 消息订阅发布

1. 使用第三方库: pubsub-js

2. 安装: npm install pubsub-js

3. 使用:1)Import PubSub from ‘pubsub-js’2)订阅消息: PubSub.subscribe(‘eventName’, callback)3)发布消息: PubSub.publish(‘eventName’, data)4)取消订阅: PubSub.unsubscribe(‘eventName’)

3. eventChannel 事件通道

1. 订阅事件

a)wx.navigateTo()跳转的时候在events选项中定义事件名及事件对应的回调

小程序实现下拉刷新页面面试题,微信小程序常问面试题

2. 获取事件总线对象a)目标页面中通过: 实例.getOpenerEventChannel()b)示例: const eventChannel = this.getOpenerEventChannel()

3. 触发事件

a)eventChannel.emit(‘事件名’, data)

小程序实现下拉刷新页面面试题,微信小程序常问面试题