微信小程序开发技巧:Promise、如何写scss、如何搭建Webstorm
1.潜在陷阱和Tips
本来想写一点小技巧,结果总结了一下。在开始之前,我并不知道开发微信小程序的体验如此糟糕。从创作工具微信到所谓的“新语言”,都渗透着浓浓的five的碎片化视野。 ,真是让我emmm……另外,我发现网上的迷你编程文章大多是关于如何使用、如何避免陷阱的实用文章,而不是技术文章,这也是从另一个侧面代表的。小程序中的陷阱很多。
在微信小程序原生开发过程中,我们提出了诸如“拥有如此多技术人才的腾讯为什么要这样释放laji?”等问题。很多方面和长辈都是社区提出来的,两三年前。官方回应据说是定了,但几年过去了,依然没有消息,官方回应依然是冷冰冰的“反馈”?白屏,重置不行,可以强行退出再打开;
import
的路径不支持完整路径。例如,如果要指定 utils/fetch.js
,无论元素有多深,都必须 ../
单击根文件夹,同样 .wxss
文件@import
导入文件时只能使用正确的路径,因此会出现../../../。 ../../../utils/fetch.js
此对象类型; .wxs
该文件不支持ES6,可以使用ES5脚本; .wxs
文件是否只能包含在文件.wxml
中,而不能包含.js
? ? ?即使是{{}}
中的方法也不可行,根本无法像+ - * /
那样工作。如果遇到需要过滤
场景的数据,则需要在.js
中执行,然后setData通常是[2,3,4]。那里(有点)
,我什至都跑不了!文件 .wxs
无法使用 Date
对象,因此您无法 new Date()❀,只能使用 ❀
方法,对于常见的事物也是如此。要创建自定义对象,我们需要使用 getRegExp
函数 getRegExp(pattern[, flags])
;其他可以在.wxs
.wxs文件中调用,并且必须调用.wxs。导入的文件必须使用相对路径;
setData
懒得组合东西。如果 data: { a: {b: 1, c: 1}}
,则 setData({a: {b: 2}})
将丢失 a.c 的值,这很烦人 人们很生气,需要 setData({['a.b': 2]})
这就是要做的; Date
对象可以获得任意时间戳,例如 GetDay 以及所有 和 nan,因为它们不支持 iOS 日期创建者的日期这种格式2018-04-26 2018 /04/26
只有此格式才会合法显示;
2。微信请求修改 Promise
2.1 使用现成的库
安装 Promise 库 wx-promise-pro,记得带上 -s
或 或 ,否则安装将会失败。
npm i -S wx-promise-pro
然后在app.js
:
import { promisifyAll } from 'wx-promise-pro'
promisifyAll() // promisify all wx api
App({ ... })
这样就可以正常使用了:
wx.pro.showLoading({
title: '加载中',
mask: true
})
.then(() => console.log('in promise ~'))
2.2 我们自己实现♷,其实规则很简单。以wx.request原生API为例: // 原生 API 使用方式
wx.request({
url: '', // 请求的 url
data: {}, // 参数
method: '', // post、get
success: res => {
// 请求成功回调函数,res为回调参数
},
fail: res => {
// 请求失败回调函数,res为回调参数
}
})
// 原生 API 使用方式
wx.request({
url: '', // 请求的 url
data: {}, // 参数
method: '', // post、get
success: res => {
// 请求成功回调函数,res为回调参数
},
fail: res => {
// 请求失败回调函数,res为回调参数
}
})
如果我们做出一个Promise,那么调用方法应该是:
// Promise 化后的期望使用方式
wx.pro.request({
url: '', // 请求的 url
data: {}, // 参数
method: '' // post、get
})
.then(res => {
// 请求成功回调函数,res为回调参数
})
.catch(res => {
// 请求失败回调函数,res为回调参数
})
and then
函数返回一个Promise对象,这样这个函数就可以返回一个承诺对象。调用链还在继续,所以我们需要 new
来退出,带着一个 Promise 对象:
function request(opt) {
return new Promise((resolve, reject) => {
wx.request({
...opt,
success: res => { resolve(res)},
fail: res => {reject(res)}
})
})
}
我们可以进一步改进这段代码,因为 这里发送的参数是使用方法 success❀
resolve
, reject
实现,因此可以直接传递到 ›♻
reject 照着做就可以了。
另外,由于原生API格式与其他小程序相同,所以我们可以使用curry方法来操作其他需要promise的API:
function promisify(api) {
return (opt = {}) => {
return new Promise((resolve, reject) => {
api({
...opt,
fail: reject,
success: resolve
})
})
}
}
然后将curry方法的结果作为新的基于Promise的API是在对象wx.pro
中实现的:
// 将指定 API 进行 Promise 化
wx.pro.request = promisify(wx.request)
// 使用
wx.pro.request({...})
.then(...)
然后为了方便使用其他方法,我们可以将方法 其实我们不知道,我们实现了 有了上面的工具,我们就可以在项目中使用了。为了不将它们分散到整个项目中, 想使用API的地方,可以这样包含: 使用起来非常方便,就用在这里。下面我要介绍的upData是一款强烈推荐的迷你编程工具~ 在小程序中, 例如,对于某些条件,您需要将 上面的两种方法是我们日常小程序中经常用到的。与其他基于网络的系统相比,它们非常弱,并且给人一种强烈的半成品印象。有没有这样的方法: 这个方法会帮助我们深入嵌套对象中修改相应的属性值,跳过我们不想修改的数组元素,直接设置属性值即可。以及我们提供的数组对象。这不是会删除很多坏代码吗?阅读能力也非常好。 这就是为什么我在线项目中使用wx-updata而不是 wx-updata的原理很简单。例子: 原来这个转换任务需要我们去做,我们必须手动去做,但是现在wx-updata帮我们做了,对吧! ?使用 某些系统可能对 在更改文件夹中的指定对象时,可能会出现跳过目录中的空白区域,wx-updata提供了Empty的Symbol类型的替换,如以及数组中对象的路径方法。如果有兴趣,可以参考wx-updata的文档,也可以参考《开发微信小程序,我为什么放弃setData而使用upData》这篇介绍性文字。 另外,使用wx-updata后也可以使用原来的setData。尤其是有时候需要清理数组时,可以轻松使用它来获得更好的小程序开发体验。祝大家小程序开发顺利吗? 关于文件中使用的蹩脚 然后记得在 这样,include到git中,scss文件就不会上传了~当然,如果你的团队成员需要scss,建议上传到git时添加scss文件。 这个条件之后,本地就会出现这样的元素 其中,我们应该看的是 如果你没有使用webstorm,可以直接执行命令 同样,你也可以使用small、stylus等准备好的语言。 ?附加帮助: 上面的 当然可以不添加,如果你的同事也用scss来设计的话小程序,其他都和上面一样。现在你可以愉快地使用scss来开发小程序了~ 在Web开发中,iconfont是最常用的字体工具。 ,这里介绍如何向微信小程序添加iconfont图标。 首先找到你想要使用的图标,点击购物车,下载到本地。 是本地可用的压缩包。解压后将 将样式包含在wx♺作为基于对象的Promise进行循环,如
请求
、扫码
、显示Toast
是12岁,而第三个元素中的等被一一放置。
到数组中的 0 个元素。如果agewx.pro
对象,可以直接使用wx.pro.xx
。因为此方法返回一个 Promise 对象,所以它可以像任何其他 Promise 对象一样使用。wx-promise-pro
的源代码。这个库的主要代码就是上面几行?2.3 在项目中使用
wx.request
或wx.pro.request
只能在此处控制,创建两个新文件如下: 所有API作为单独的文件进行集中管理: // utils/api/apis.js 封装所有请求 API
import { fetch } from './fetch'
/* 根据微信code获取用户信息 */
const appUserGetByCode = ({ code } = {}) => fetch({
url: '/app/user/get-by-code',
data: { code }
})
/* 扫码登录 */
const appUserQrLogin = ({ qrCode } = {}) => fetch({
method: 'POST',
url: '/app/user/qr-login',
data: { qrCode }
})
/* 个人信息 */
const appUserInfo = () => fetch({
url: '/app/user/info'
})
/* 系统参数获取,数据字典 */
const appSysParamListByParam = () => fetch({
url: '/app/sys-param/list-by-param'
})
/* 数据字典所有 */
const appSysParamListAll = () => fetch({
url: '/app/sys-param/list-all'
})
export {
appSysParamListAll, // 数据字典所有
appSysParamListByParam, // 系统参数获取,数据字典
appUserGetByCode, // 根据微信code获取用户信息
appUserQrLogin, // 扫码登录
appUserInfo // 个人信息
}
import * as Api from '../../utils/api/apis.js' // 相对路径
// 使用方式
Api.appSysParamListAll()
.then(({ dataList }) => this.upData({ sysParamList: dataList }))
.then(() => {
const keyList = this.data.sysParamList.map(T => T.key)
this.upData({
keyList,
formData: { keys: keyList }
})
})
3。 SetState改变数据对象的状态
data
是无法直接使用的,需要使用setData。考虑到开发微信小程序时使用
为155,使用setData
的不好的体验,我使用了一个库函数wx-updata
。这对我在图书馆工作的开展过程中非常有帮助。这里给大家一个特别的建议。 ? .heightsetData
。范围:data: {
name: '蜡笔小新',
info: {
height: 140, color: '黄色',
desc: [{ age: 8 }, '最喜欢大象之歌', '靓仔', { dog: '小白', color: '白色' }]
}
}
info.height
更改为155,并更改 .desccolor
是灰色怎么办? // 先取出要改变的对象,改变数字后 setData 回去
const { info } = this.data
info.height = 155
info.desc[0].age = 12
info.desc[3].color = '灰色'
this.setData({ info })
// 或者像某些文章里介绍的,这样可读性差,也不太实用
this.setData({
'info.height': 155,
'info.desc[0].age': 12,
'info.desc[3].color': '灰色'
})
this.upData({
info: {
height: 155,
desc: [{ age: 12 }, , , { color: '灰色' }]
}
})
setData
this.upData({
info: {
height: 155,
desc: [{ age: 12 }]
}
})
// 会被自动转化为下面这种格式,
// this.setData({
// 'info.height': 155,
// 'info.desc[0].age': 12,
// })
setData
与 upData
相同: // app.js 中挂载
import { updataInit } from './miniprogram_npm/wx-updata/index' // 你的库文件路径
App({
onLaunch() {
Page = updataInit(Page, { debug: true })
}
})
// 页面代码中使用方式
this.upData({
info: { height: 155 },
desc: [{ age: 13 }, '帅哥'],
family: [, , [, , , { color: '灰色' }]]
})
Page
可能不是最佳选择方式太多了。 wx-updata
公开工具模式。用户可以直接使用页面代码中的工具方法进行处理: // 页面代码中
import { objToPath } from './miniprogram_npm/wx-updata/index' // 你的库文件路径
Page({
data: { a: { b: 2}, c: [3,4,5]},
// 自己封装一下
upData(data) {
return this.setData(objToPath(data))
},
// 你的方法中或生命周期函数
yourMethod() {
this.upData({ a: { b: 7}, c: [8,,9]})
}
})
4.使用scss编写样式
4.1 Webstorm配置方法
.wxss❀工具❀❀ scss文件编辑编译实时保存在一个文件中
.wxss
,我感觉比较好用。这里把我的配置分享给大家: .gitignore
文件中添加ignore方法:*.scss
*.wxss.map
.js
,.js
。该网站使用商标 .js .js。更改文件后,会自动生成并更新scss
、.wxml
文件和另一个文件.wxss
,并更新.w x SS 地图
是插件自动生成的地图连接,不用管。 sass --watch index.scss:index.wxss -s Expanded
。如果关闭命令行,sass命令将不会跟踪文件更改然后进行编译。所以最好使用插件编辑器。 "easysass.formats": [
{
"format": "expanded",
"extension": ".wxss"
},
{
"format": "compressed",
"extension": ".min.wxss"
}
]
展开的
是编译后的.wxss
文件,下面的”.wxs s
文件格式,如果满足以下条件不需要的话,你可以把下面的软件去掉,然后在文件.gitignore
中添加忽略中间方法:*.scss
5。使用iconfont图标
iconfont.css
文件复制到微信小程序的styles
文件夹中(也可以将其放入fonts下面想要放入的自定义中) ),将后缀更改为.wxss
app.wxss
::❀中即可将其添加到wxml中使用i
。小程序使用新的text
标签:<text class="iconfont icon-my-edit" style="color: blue"></text>
iconfont.css
在本地重命名并重写流程。更好,并且不需要包含外部字体文件,但大多数情况下是不能满足的。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。