微信小程序开发常见问题

无论是哪一种类型的开发,新手总是会在踩各种坑的情况下成为老手。在此,和大家说说在进行小程序开发时经常遇见的问题。
(1)如何去掉自定义button灰色的圆角边框
解决方式:通过设置button的伪元素样式进行去除: button::after{ display: none;}
(2)如何获取自定义属性

<view bindtap="bintap" data-id="1"></view>

解决方式:

bintap:function(e){
    var id = e.currentTarget.dataset.id;
}

(3)出现“脚本错误或者未正确调用Page()”的错误提示。
这里写图片描述
解决方式:出现这个错误的原因通常是因为index.js (即对应页面的js文件)里,没有调用Page方法。即使js文件里没有任何代码,也需要在js里添加一个空的 Page({ })。注意Page的P要大写。
(4)出现警告信息“
这里写图片描述
解决方式:
首先,这只是一个警告信息,不是错误信息,不理他不会对程序运行有任何的影响。官方文档原话:如不提供 wx:key,会报一个 warning, 如果明确知道该列表是静态,或者不必关注其顺序,可以选择忽略。如果你一定想去掉这个警告,可以在wx:for的组件属性里增加一个 wx:key=”unique”,unique请替换成数据绑定列表里的任意一个字段的字段名,比如文章列表数据中的字段“postId”,即wx:key=”postId”。不建议使用wx:key=”*this”。其实wx:key用来对列表渲染的数据指定一个”主键”,以加快列表渲染的速度。
(5)转发小程序给好友或转发到群时,成功显示转发时定义的标题、图片、描述等,但打开转发链接时提示“页面不存在”的问题。
解决方式:检查转发中”path“字段的转发路径是否正确,若path填写的路径的为“/pages/index/index”,小程序项目结构为
这里写图片描述
将path写成“pages/index/index”即可。path的路径需根据自己创建的项目结构进行填写,否则就会出现该问题。
(6)快速创建页面的方式
①在app.json文件下pages数组里,添加一个页面的路径,如果这个路径指向的是一个不存在的文件,那么MINA框架会自动创建这个页面的四个文件。我们可以试一下,在app.json文件的pages数组里添加一项 “pages/demo/demo”,然后保存项目。
②鼠标右键点击想在那一个目录下创建文件夹的目录,鼠标右键进行创建新的目录并进行目录的命名,鼠标右键点击新创建好的目录,选择新建后点击Page项,输入名称,就可以之间生成该目录下的四种文件,js、wxml、wxss以及json文件,且在app.json文件中也已自动生成了新建目录的路径。
(7)EventEmitter检测内存泄漏问题。
这里写图片描述
内存泄漏(Memory Leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。
导致内存泄漏的原因:
① 全局变量:全局变量直接挂在 root 对象上,不会被清除掉

a = 10;//未声明对象。
global.b = 11;//全局变量引用

② 闭包:闭包会引用到父级函数中的变量,如果闭包未释放,就会导致内存泄漏。上面例子是 inner 直接挂在了 root 上,那么每次执行 out 函数所产生的 bigData 都不会释放,从而导致内存泄漏。

function out() {
  const bigData = new Buffer(100);
  inner = function () {
    void bigData;
  }
}

③ 事件监听:Node.js 的事件监听也可能出现的内存泄漏。例如对同一个事件重复监听,忘记移除(removeListener),将造成内存泄漏。这种情况很容易在复用对象上添加事件时出现,所以事件重复监听可能收到如下警告:

(node:2752) Warning: Possible EventEmitter memory leak detected。11 haha listeners added。Use emitter。setMaxListeners() to increase limit

④其他原因:还有一些其他的情况可能会导致内存泄漏,比如缓存、非常占用 CPU 的代码等。
虽然只是警告,但有时候会影响到其他事件的执行,且,控制台上存在标红时,相信每一个程序员的心里应该都是不太舒服的。
避免内存泄漏方式:
① ESLint 检测代码检查非期望的全局变量。
② 使用闭包的时候,得知道闭包了什么对象,还有引用闭包的对象何时清除闭包。最好可以避免写出复杂的闭包,因为复杂的闭包引起的内存泄漏,如果没有打印内存快照的话,是很难看出来的。
③ 绑定事件的时候,一定得在恰当的时候清除事件。在编写一个类的时候,推荐使用 init 函数对类的事件监听进行绑定和资源申请,然后 destroy 函数对事件和占用资源进行释放。
解决方式:小编查看了很多资料,大多都是国外的且解决方式均是使用node.js搭建的项目以及js方面的解决方式,说的大同小异,都是使用events模块进行解决。至今还未发现针对小程序对这个问题的解决方式,若有同学遇到过这个问题且已经解决了的,麻烦分享一下解决方式,不胜感激。

// 导入events模块
var events = require('events');
// 创建EventEmitter对象
var eventEmitter = new events.EventEmitter();

猜你喜欢

转载自blog.csdn.net/lavendersue/article/details/80282308