From 166ba61c0f9376f4c0c99b39b2e2af4067977dbd Mon Sep 17 00:00:00 2001 From: rex <rexkaneki@gmail.com> Date: Sun, 29 Nov 2020 18:24:26 +0800 Subject: [PATCH] perf(icon): use wxs (#3791) --- example/pages/icon/index.wxss | 3 +-- packages/icon/computed.wxs | 50 +++++++++++++++++++++++++++++++++++ packages/icon/index.ts | 9 +------ packages/icon/index.wxml | 7 ++--- 4 files changed, 56 insertions(+), 13 deletions(-) create mode 100644 packages/icon/computed.wxs diff --git a/example/pages/icon/index.wxss b/example/pages/icon/index.wxss index 17f7fcd9..3b3083d2 100644 --- a/example/pages/icon/index.wxss +++ b/example/pages/icon/index.wxss @@ -10,9 +10,8 @@ page { } .icon { - display: block; margin: 16px 0; - color: #323233; + color: #323233 !important; } .text { diff --git a/packages/icon/computed.wxs b/packages/icon/computed.wxs new file mode 100644 index 00000000..4fde5f08 --- /dev/null +++ b/packages/icon/computed.wxs @@ -0,0 +1,50 @@ +/* eslint-disable */ +var utils = require('../wxs/utils.wxs'); + +function isImage(name) { + return name.indexOf('/') !== -1; +} + +function rootClass(data) { + var classes = ['custom-class']; + + if (data.classPrefix != null) { + classes.push(data.classPrefix); + } + + if (isImage(data.name)) { + classes.push('van-icon--image'); + } else if (data.classPrefix != null) { + classes.push(data.classPrefix + '-' + data.name); + } + + return classes.join(' '); +} + +function rootStyle(data) { + var styles = []; + + if (data.color) { + styles.push(['color', data.color]); + } + + if (data.size) { + styles.push(['font-size', utils.addUnit(data.size)]); + } + + if (data.customStyle) { + styles.push([data.customStyle]); + } + + return styles + .map(function (pair) { + return pair.join(':'); + }) + .join(';'); +} + +module.exports = { + isImage: isImage, + rootClass: rootClass, + rootStyle: rootStyle, +}; diff --git a/packages/icon/index.ts b/packages/icon/index.ts index fe9caf30..e4bb2d8b 100644 --- a/packages/icon/index.ts +++ b/packages/icon/index.ts @@ -11,14 +11,7 @@ VantComponent({ type: String, value: 'van-icon', }, - name: { - type: String, - observer(val) { - this.setData({ - isImageName: val.indexOf('/') !== -1, - }); - }, - }, + name: String, }, methods: { diff --git a/packages/icon/index.wxml b/packages/icon/index.wxml index fe4065a4..62eff360 100644 --- a/packages/icon/index.wxml +++ b/packages/icon/index.wxml @@ -1,8 +1,9 @@ <wxs src="../wxs/utils.wxs" module="utils" /> +<wxs src="./computed.wxs" module="computed" /> <view - class="custom-class {{ classPrefix }} {{ isImageName ? 'van-icon--image' : classPrefix + '-' + name }}" - style="color: {{ color }};font-size: {{ utils.addUnit(size) }};{{ customStyle }}" + class="{{ computed.rootClass({ classPrefix, name }) }}" + style="{{ computed.rootStyle({ customStyle, color, size }) }}" bind:tap="onClick" > <van-info @@ -12,7 +13,7 @@ custom-class="van-icon__info" /> <image - wx:if="{{ isImageName }}" + wx:if="{{ computed.isImage(name) }}" src="{{ name }}" mode="aspectFit" class="van-icon__image"