关于微信小程序的面试题及其解析

news/2025/2/22 21:20:19

在这里插入图片描述

我的血液里流淌着战意!力量与智慧指引着我!

在这里插入图片描述

文章目录


1. 小程序的架构是什么样的?

答案:小程序的架构主要包括前端(由WXML、WXSS、JavaScript组成)和后端(可选择任意后端语言),以及通过API进行的数据交互。

2. 什么是WXML和WXSS?

答案:WXML(WeiXin Markup Language)是小程序的标记语言,用于构建页面结构。WXSS(WeiXin Style Sheets)是小程序的样式表语言,类似于CSS。

3. 小程序的生命周期有哪些?

答案:小程序的生命周期包括onLaunch(小程序初始化)、onShow(小程序显示)、onHide(小程序隐藏)、onError(错误处理)等。

4. WXML与标准的HTML的区别?

答案:WXML与HTML都是用来描述页面的结构;都由标签、属性等构成;但标签名字不同,且小程序标签更少,单一标签更多;WXML多了一些wx:if这样的属性以及{{}}这样的表达式;WXML仅能在小程序>微信小程序开发者工具中预览,而HTML可以在浏览器内预览;组件封装不同,WXML对组件进行了重新封装;小程序运行在JS Core内,没有DOM树和window对象,无法使用window对象和document对象。

5. WXSS和CSS的异同?

答案:WXSS和CSS都是用来描述页面的样式;WXSS具有CSS的大部分特性,但也做了一些扩充和修改;WXSS新增了尺寸单位rpx,是响应式像素,可以根据屏幕宽度进行自适应;WXSS仅支持部分CSS选择器;WXSS提供全局样式与局部样式;WXSS不支持window和dom文档流。

6. 怎么封装小程序>微信小程序的数据请求?

答案:将所有的接口放在统一的js文件中并导出;在app.js中创建封装请求数据的方法;在子页面中调用封装的请求数据。

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

答案:在app.js中使用全局变量实现数据传递;给元素添加data-*属性来传递值,然后通过e.currentTarget.dataset或onload的param参数获取;通过设置id的方法标识来传值,通过e.currentTarget.id获取设置的id的值,然后通过设置全局对象的方式来传递数值;页面跳转或重定向时,在navigator中使用url带参数传递数据;使用组件模板template传递参数;使用缓存传递参数;使用数据库传递参数。

8. 小程序的双向绑定和Vue哪里不一样?

答案:两者大体相同,但小程序直接使用this.data属性是不可以同步到视图的,必须调用this.setData()方法。取值方面,Vue中通过this.xxx取值,小程序中通过this.data.xxx取值。定义方法和取变量的方式也不同。

9. 小程序如何实现下拉刷新?

答案:在app.json或page.json中配置enablePullDownRefresh:true;在page里用onPullDownRefresh函数,在下拉刷新时执行;在下拉函数执行时发起数据请求,请求返回后,调用wx.stopPullDownRefresh停止下拉刷新的状态。

1.步骤一

在页面的配置文件(通常是 page.json)中开启下拉刷新功能

{
  "enablePullDownRefresh": true
}

2步骤二

在页面的脚本文件(通常是 page.js 或 page.ts)中,定义 onPullDownRefresh 方法来处理下拉刷新事件

Page({
  onPullDownRefresh: function () {
    // 在这里执行数据更新的操作,例如发送网络请求获取新数据
    console.log('正在刷新数据...');

    // 模拟网络请求的延迟
    setTimeout(function () {
      console.log('数据刷新完成');

      // 数据更新完成后,调用 wx.stopPullDownRefresh() 停止下拉刷新的状态
      wx.stopPullDownRefresh();
    }, 2000);
  }
});

10. bindtap和catchtap的区别?

答案:bindtap不会阻止冒泡事件,catchtap可以阻止冒泡。

1.bindtap
  • 场景描述:在一个购物车页面中,有一个商品列表,每个商品项都可以点击进行查看详情。当用户点击任意商品项时,不仅会触发该商品项的查看详情事件,还会触发页面级别的统计事件(如记录用户点击了哪个商品分类)。
<view>
  <block>
    <view>
      {{item.name}} - {{item.price}}
    </view>
  </block>
</view>

Page({
  data: {
    products: [
      { id: 1, name: '产品A', price: 100 },
      { id: 2, name: '产品B', price: 200 }
    ]
  },
  handleCategoryTap: function() {
    console.log('商品分类被点击');
  },
  handleProductTap: function(e) {
    console.log('产品' + e.currentTarget.dataset.name + '被点击');
  }
});
2.catchtap
  • 场景描述:在一个表单页面中,有一个提交按钮。当用户点击提交按钮时,只会触发按钮自身的提交事件,不会触发其他无关的事件(如页面上的其他按钮的点击事件或链接的跳转事件)。
<view>
  <button>提交订单</button>
  <a href="/pages/other/other">另一个页面</a>
&lt;/view&gt;

Page({
  handleSubmitTap: function() {
    console.log('提交订单按钮被点击');
  }
});

11. 小程序>微信小程序与H5的区别?

答案:运行环境不同(小程序在微信运行,H5在浏览器运行);开发成本不同(H5需要兼容不同的浏览器);获取系统权限不同(系统级权限可以和小程序无缝衔接);应用在生产环境的运行流畅度不同(H5需不断对项目优化来提高用户体验)。

12. 小程序>微信小程序原理是什么?

答案:小程序>微信小程序采用JavaScript、WXML、WXSS三种技术进行开发。从技术上讲和现有的前端开发差不多,但深入挖掘又有所不同。JavaScript的代码是运行在微信App中的,并非运行在浏览器中,因此一些H5技术的应用需要微信App提供对应的API支持。WXML是微信自己基于XML语法开发的,只能使用微信提供的现有标签。WXSS具有CSS的大部分特性,但并不是所有的都支持。微信的架构是数据驱动的架构模式,UI和数据是分离的,所有的页面更新都需要通过对数据的更改来实现。小程序分为webview和appService两部分,其中webview主要用来展现UI,appService有来处理业务逻辑、数据及接口调用,它们在两个进程中运行,通过系统层JSBridge实现通信,完成UI的渲染、事件的处理。

13. 分析小程序>微信小程序的优劣势?

答案:优势包括无需下载、打开速度快、开发成本低、为用户提供良好的安全保障、服务请求快等。劣势包括依托微信不能开发后台管理功能、大小限制不能超过2M、不能打开超过5个层级的页面、样式单一等。

14. 如何解决小程序>微信小程序的异步请求问题?

答案:在回调函数中调用下一个组件的函数。

1.使用回调函数
wx.request({
  url: 'https://example.com/api',
  success: function(res) {
    // 请求成功后的处理逻辑,比如更新页面数据
    console.log('请求成功,返回数据:', res.data);
  },
  fail: function(error) {
    // 请求失败后的处理逻辑,比如提示用户
    console.error('请求失败,错误信息:', error);
  }
});

2.使用Promise对象

可以使用Promise封装wx.request(),利用Promise的链式调用特性,简化异步处理过程

function request(url) {
  return new Promise((resolve, reject) =&gt; {
    wx.request({
      url: url,
      success: function(res) {
        resolve(res.data); // 请求成功,调用resolve方法
      },
      fail: function(res) {
        reject(res); // 请求失败,调用reject方法
      }
    });
  });
}

// 使用Promise进行异步请求
request('https://example.com/api')
  .then(function(data) {
    // 请求成功后的处理逻辑
    console.log('请求成功,返回数据:', data);
  })
  .catch(function(err) {
    // 请求失败后的处理逻辑
    console.error('请求失败,错误信息:', err);
  });

3.使用async/await

通过async和await关键字,可以以同步的方式编写异步代码

async function fetchData() {
  try {
    const res = await new Promise((resolve, reject) =&gt; {
      wx.request({
        url: 'https://example.com/api',
        success: resolve,
        fail: reject
      });
    });
    console.log('请求成功,返回数据:', res.data);
  } catch (error) {
    console.error('请求失败,错误信息:', error);
  }
}

// 调用异步函数
fetchData();

15. 小程序有哪些文件类型?

答案:WXML(模板文件)、WXSS(样式文件)、JS(脚本逻辑文件)、JSON(配置文件)。

16. 简述小程序>微信小程序页面的生命周期函数?

答案:onLoad:页面加载时触发;onReady:页面初次渲染完成时触发;onShow:页面显示时触发;onHide:页面隐藏时触发;onUnload:页面卸载时触发。

17. 小程序如何更新页面中的值?

答案:通过调用this.setData()方法来更新页面中的值。

18. 如何实现登录数据的持久化?

答案:可以使用本地存储(如wx.setStorageSync和wx.getStorageSync)或缓存(如wx.setStorageSync和wx.getStorageSync)来实现登录数据的持久化。

1.使用本地缓存
  • 存储数据
// 用户登录成功后,存储登录数据到本地缓存
wx.setStorageSync('token', '登录凭证');
wx.setStorageSync('userInfo', { name: 'John', age: 25 });

  • 读取数据
// 获取本地缓存中的登录数据
const token = wx.getStorageSync('token');
const userInfo = wx.getStorageSync('userInfo');

19. 小程序>微信小程序和app有什么不同之处?

答案:小程序>微信小程序无需下载安装即可使用,而app需要下载安装;小程序>微信小程序更轻量级,占用空间小;app的功能和性能通常比小程序更强大。

20. 小程序>微信小程序如何进行双向绑定?

答案:小程序>微信小程序的双向绑定需要借助data来实现,并且需要使用this.setData()方法来更新视图。


&lt;view&gt;
  &lt;input type="text" /&gt;
  &lt;text&gt;你输入的是: {{inputValue}}&lt;/text&gt;
&lt;/view&gt;

// index.js
Page({
  data: {
    inputValue: '' // 初始化数据模型中的inputValue变量
  },
  handleInput: function(e) {
    this.setData({
      inputValue: e.detail.value // 更新数据模型中的inputValue变量为输入框中的当前值
    });
  }
});

21. 如何自定义tabbar?

答案:在app.json中配置tabBar字段,并在pages数组中配置每个页面的路径。

22. 小程序怎样使用自定义组件?

答案:先创建一个components文件夹用来存放所有自定义组件,然后在其中创建自定义组件的目录结构(包括wxml、wxss、js、json文件);在.json文件中进行自定义组件声明;在需要使用的页面的.json文件中引入自定义组件;最后在页面的.wxml文件中引用自定义组件。

23. 小程序本地存储(数据缓存)有哪些常用api?

答案:常用的api包括wx.setStorageSync(key, value)、wx.getStorageSync(key)、wx.removeStorageSync(key)等。

24. 小程序>微信小程序如何关联微信公众号?

答案:需要在微信公众号后台进行相关配置,并获取必要的信息(如AppID、AppSecret等),然后在小程序中进行相应的设置和调用。

25. webview中的页面怎么跳转回小程序

答案:先在管理后台配置域名白名单,然后引入jweixin-1.3.2.js(https://res.wx.qq.com/open/js/jweixin-1.3.0.js),最后使用wx.miniProgram.navigateTo方法进行跳转。

26. 小程序>微信小程序如何实现分页加载数据?

答案:可以通过滚动监听(如onReachBottom事件)来检测用户是否滚动到页面底部,然后发起网络请求加载更多数据,并更新页面内容。

27. 小程序中的模态框如何实现?

答案:可以使用官方提供的模态框组件(如),也可以通过自定义组件来实现模态框的效果。

28. 小程序>微信小程序如何获取用户的位置信息?

答案:可以使用wx.getLocation接口来获取用户的地理位置信息,但需要注意获取用户授权。

29. 小程序中的图片如何实现懒加载?

答案:可以使用标签的lazy-load属性来实现图片的懒加载,或者通过第三方库来实现。


http://www.niftyadmin.cn/n/5862771.html

相关文章

视频mp4垂直拼接 水平拼接

视频mp4垂直拼接 水平拼接 pinjie_v.py import imageio import numpy as np import os import cv2def pinjie_v(dir1,dir2,out_dir):os.makedirs(out_dir, exist_okTrue)# 获取目录下的所有视频文件video_files_1 [f for f in os.listdir(dir1) if f.endswith(.mp4)]video_fi…

react+typescript,初始化与项目配置

1&#xff0c;创建项目 npx create-react-app music --template typescript 2&#xff0c;配置项目别名 npm install craco/cracoalpha -D 1&#xff0c;最外层与src平级创建 craco.config.jsconst path require(path)const resolve (dir) > path.resolve(__dirname, d…

css特异性,继承性

html <div class"introduce"><div class"title">介绍</div><div class"card-box"><div class"card"><div class"title">管理</div></div></div> </div> scs…

腿足机器人之十- SLAM地图如何用于运动控制

腿足机器人之十- SLAM地图如何用于运动控制 腿足机器人SLAM地图的表示与处理全局路径规划&#xff1a;地形感知的路径搜索基于A*的三维路径规划基于RRT*的可行步态序列生成 局部运动规划&#xff1a;实时步态调整与避障动态窗口法的腿足适配模型预测控制&#xff08;MPC&#x…

CSS基础(浮动、相对定位、绝对定位、固定定位、粘性定位、版心、重置默认样式)

文章目录 1. 浮动&#xff08;float&#xff09;1.1 简介1.2 元素浮动后的特点1.3 脱离文档流示例图1.4 浮动产生的影响1.4.1 积极影响1.4.2 消极影响 1.5 解决浮动产生的影响1.5.1 清除浮动&#xff08;Clearfix&#xff09;1.5.2 创建新的块格式化上下文&#xff08;BFC&…

Blender小技巧和注意事项

1.雕刻模式如果没反应,需要将模式转换成编辑模式 2. 鼠标移到大纲 点击 小键盘的. / 大键盘句号 , 在大纲视图快速找到选中物体 3.打包图像等数据进Blender文件中,可以防止丢失

nginx配置:nginx.conf配置文件

nginx.conf配置文件说明 基本结构 全局块&#xff1a;位于最外层&#xff0c;定义影响整个Nginx服务器的设置。事件块&#xff1a;配置网络连接相关的设置。HTTP块&#xff1a;定义HTTP服务器以及反向代理、负载均衡等特性。Server块&#xff1a;定义虚拟主机&#xff0c;即响…

LeetCode 2595.奇偶位数:位运算

【LetMeFly】2595.奇偶位数&#xff1a;位运算 力扣题目链接&#xff1a;https://leetcode.cn/problems/number-of-even-and-odd-bits/ 给你一个 正 整数 n 。 用 even 表示在 n 的二进制形式&#xff08;下标从 0 开始&#xff09;中值为 1 的偶数下标的个数。 用 odd 表示…