想象一下,你是一位积木建筑师,面前有一堆五颜六色的积木块。有的积木是“墙体”(承载内容),有的是“涂料”(决定外观),还有的是预装好的“功能模块”(自带灯光的窗户、能开合的门)。你的任务是用这些积木搭建一栋既能住人又美观的房子。小程序开发正是如此——WXML 是墙体和房间结构(决定页面长什么样),WXSS 是涂料和壁纸(决定页面好不好看),组件则是预制模块(把常用功能打包成积木块,随时取用)。而今天的重点——WXML/WXSS 与组件化开发,就是教你如何高效地搭建这栋“数字积木房”。
理解小程序视图层的设计哲学,是成为跨平台前端开发者的第一步。它能帮你从“写死页面”进阶到“像搭积木一样构建功能”,无论是微信、支付宝还是抖音小程序,这套底层逻辑都高度相通。
可视化演示
展示CNN卷积运算过程:卷积核在输入特征图上滑动计算加权和,经ReLU激活后生成输出特征图。支持卷积运算与多层特征提取模式切换。
本节配有交互动效(进入视口后自动加载,约 3KB)。
卷积运算流程 卷积核在输入上滑动计算加权和 ReLU激活函数引入非线性 Y(i,j)=ΣΣ X(i+m,j+n)·K(m,n)+b 局部感知与权值共享
WXML标记语言
积木房的“墙体说明书”
回到我们搭积木的场景。你准备搭建一栋小房子,首先需要一份图纸告诉每块墙体积木放在哪里、房间怎么隔断。在小程序的世界里,WXML(WeiXin Markup Language)就是这份“墙体说明书”,它定义了页面的结构和布局。
WXML 是微信小程序专用的标记语言,与网页开发中的 HTML 非常相似,但针对移动端和原生体验做了优化。WXML 使用标签(如 <view>、<text>、<button>)来定义界面的结构。你可以把 <view> 想象成一块通用的墙体积木(类似 HTML 的 <div>),<text> 是门牌标签(类似 <span>),<button> 是带功能的门铃按钮。
与 HTML 最大的不同在于,WXML 的标签更贴近移动端交互场景,并且天生支持数据绑定(后续会介绍)。它还严格要求标签闭合,就像积木必须严丝合缝地拼接,否则整面墙会松动。如果你写过 HTML,会发现 WXML 的入门成本极低——两者都是“用标签描述结构”的语言。
1. 视图层结构:WXML 是视图层的骨架语言,负责描述页面元素的组织方式。
2. 与HTML异同:同源于标记语言家族,但 WXML 针对移动端优化,内置组件更丰富。
3. 标签语义化:每个 WXML 标签都有明确的视觉或功能语义,就像积木上的颜色标记。
回到积木房:墙体积木上如果有凹槽和凸起(语义化标签),你就能一眼看出哪块应该放在哪个位置。WXML 的标签名称本身就在告诉你它的用途——这块积木是承重墙(<view>),那块是门窗(<button>),这块是做装饰的壁灯(<text>)。
<view class="header"> <text>欢迎来到积木小屋</text> <button>点击开门</button></view>
数据绑定机制
给墙体装上“智能开关”
传统 HTML 页面里,内容写死之后就像被涂料封死的墙面——想换颜色只能重新粉刷。但在 WXML 中,墙体上的文字、属性值甚至结构都可以和 JavaScript 中的数据进行绑定。这就像给每面墙装上了“智能开关”:你只需在控制中心(JS 文件)里改数据,墙面上的显示就会自动更新。
数据绑定的核心是双大括号语法 {{ }}(也叫 Mustache 语法),就像在墙上预留了一个“数据插槽”。页面加载时,插槽会自动从 JS 数据源中取出对应的值填入。
这种“数据驱动视图”的模式,意味着你永远不需要亲自去操作 DOM 节点改内容(就像不需要拿螺丝刀去一块块拆墙换积木),只需修改 JS 中的数据,页面就会自动响应。这是小程序与早期原生开发最大的思维转变。
1. 双大括号语法:{{ }} 是 WXML 中读取 JS 变量的统一入口。
2. 数据驱动视图:视图是数据的函数,数据变化时视图自动更新。
3. 动态属性绑定:标签属性也能绑定数据,如 disabled="{{!doorOpen}}"。
回到积木房:你不再需要半夜爬起来拿手电筒照亮墙上的文字去修改,只需要在总控台上的触控屏(JS 数据)上滑动一下,墙上的灯光字样就会自动变化。数据绑定让开发者的角色从“泥瓦工”升级为“智能家居控制员”。
// page.jsPage({ data: { greeting: '欢迎来到积木小屋', doorOpen: true }})
<!-- page.wxml --><view> <text>{{greeting}}</text> <!-- 动态属性绑定:门是否打开决定了按钮文字的显示状态 --> <button disabled="{{!doorOpen}}">门已开启</button></view>
列表渲染
批量生产积木墙
假设你要在积木房的一面墙上贴满照片,每张照片需要一个相框。在传统开发中,你得一块块地粘贴,写 10 张照片就要写 10 个相框标签。但在 WXML 中,你只需要一个“批量生产指令”——wx:for——就能让积木工厂自动复制 N 个指定结构的相框,分别填入不同的照片。
列表渲染是 WXML 最强大的功能之一。它使用 wx:for 指令绑定一个数组,将数组中的每一项渲染为一个标签块。就像给积木工厂下达“生产 10 个相同结构相框”的命令,工厂会按清单(数组)一张张地把照片装进框里。
默认情况下,循环中每一项可以用 item 访问,索引用 index 访问(就像工厂流水线上每个工位的工号和工位号)。wx:key 是给每块“批量积木”一个唯一身份证,让小程序能精准地识别哪块积木要更新、删除或移动——这关系到渲染性能,特别是在列表很长或需要频繁增删时。
1. wx:for指令:遍历数组,将每个元素渲染为一个视图块。
2. 索引与项:item 表示当前元素,index 表示位置编号。
3. key的作用:wx:key 提供稳定标识,优化更新性能。
回到积木房:有了批量生产线,你不需要一块一块地砌墙,工厂会按你的图纸(wx:for)批量生产结构相同的积木块,并把不同数据(照片)填进每块积木中。如果某块积木的照片要替换,工人只看身份证(wx:key)就能找到正确的那一块。
<view wx:for="{{photos}}" wx:key="id"> <image src="{{item.url}}" /> <text>{{index + 1}} / {{photos.length}}</text></view>
条件渲染
积木房的“智能分流闸门”
积木房里有的房间只在特定场景下才需要开放——比如逢年过节才打开会客厅的吊灯。WXML 的条件渲染指令 wx:if 就像在积木房内部安装了一个“智能分流闸门”:当满足条件时,积木块才被安装到墙面上;不满足时,这块积木就完全不存在。
这段代码的逻辑是:当 userVIP 为真,只渲染第一块积木;否则看 userRegistered,如果为真则渲染第二块;两个都不满足就渲染第三块(wx:else)。这三块积木在同一时刻最多只有一块存在,就像闸门只放行一个方向的人流。
需要区分的是 wx:if 和 hidden 属性的不同:wx:if 是“不满足就直接不生产这块积木”(条件性挂载/卸载),而 hidden 是“积木一直存在,只是用布盖上看不见”(CSS 的 display:none)。如果某个模块只在特殊场景出现一次,用 wx:if 更省资源;如果频繁切换显隐,hidden 更高效,因为它不需要反复创建和销毁积木块。
1. wx:if指令:条件为真时渲染该标签块。
2. wx:elif分支:多个条件依次判断,只执行第一个为真的分支。
3. wx:else默认:所有条件不满足时兜底渲染。
回到积木房:你不需要把会客厅的吊灯一直装在墙上落灰——只有在节日模式开启时才从储物间取出来装上去。条件渲染让积木房具备“场景感知能力”,不同状态下展示不同的空间布局。
<view wx:if="{{userVIP}}"> <text>尊贵的VIP用户,欢迎光临</text></view><view wx:elif="{{userRegistered}}"> <text>注册用户,登录后查看完整内容</text></view><view wx:else> <text>游客模式</text></view>
rpx响应式单位
积木的“弹性标尺”
在移动端开发中,最大的痛点是屏幕尺寸千奇百怪:iPhone SE 的屏幕宽度是 320pt,iPhone Pro Max 是 414pt,安卓低端机可能只有 360px。如果你用固定的 px 来量积木尺寸,同样的积木在大屏上显得很小、在小屏上显得很大,就像用统一的鞋码给所有人穿鞋。小程序给出的解决方案是 rpx(responsive pixel,响应式像素)。
rpx 的换算规则非常简单:小程序规定所有设备的屏幕宽度一律视为 750rpx。也就是说,无论你的手机屏幕实际物理宽度是多少,都会被等分成 750 份,1rpx 就是其中一份。
这意味着,你在 iPhone SE 上设计一个宽度为 375rpx 的按钮,它会自动占据屏幕宽度的一半(375/750 = 50%);在 iPhone 14 上,它依然会占据屏幕宽度的一半,只是实际像素值变大了。设计师只需要按 750px 宽的设计稿出图,开发者直接量尺寸标注即可,无需做换算。
1. 自适应屏幕:屏幕宽度恒定为 750rpx,等分产生自适应效果。
2. 设计稿换算:设计稿宽度 750px 对应当前设备 750rpx,无需额外计算。
3. 1rpx含义:1rpx 在第 i 台设备上的实际像素值为屏幕宽度的 1/750。
回到积木房:你的积木不是用固定厘米标尺生产的,而是用“屏幕宽度百分比标尺”生产的。无论房子放在多大尺寸的墙上(屏幕),积木在视觉上总是保持相同的占墙比例——大屏上积木变大,小屏上积木变小,但格局始终如一。
iPhone SE (宽 320px) : 1rpx = 320/750 ≈ 0.43pxiPhone 14 (宽 390px) : 1rpx = 390/750 ≈ 0.52px安卓大屏 (宽 414px) : 1rpx = 414/750 ≈ 0.55px
WXSS样式系统
积木房的“装修风格手册”
如果 WXML 是墙体的结构图纸,那 WXSS(WeiXin Style Sheets)就是装修风格手册。它决定墙体的颜色、积木的圆角、文字的字体和间距——所有和“好不好看”相关的事都归它管。
WXSS 与网页开发中的 CSS 几乎完全一致,同样支持类选择器、ID 选择器、标签选择器和后代选择器等。在样式文件中,你可以为每个组件定义外观,就像给不同类型的积木涂上不同的漆料、贴上不同的纹理。
WXSS 独有的加分项有两个:一是全面支持 rpx 单位(上一节学到的弹性标尺),二是支持 page 选择器用于设置全局页面样式。此外,WXSS 也继承了 CSS 的层叠机制——多个规则同时命中时,根据“就近原则”(后写覆盖先写,特定性高的覆盖低的)来决定最终生效的样式。这就好比装修时你给积木先上一层统一的底漆,又在个别积木上加了装饰色——装饰色会盖住底漆,但没加装饰色的积木仍显示底漆。
1. 选择器类型:类选择器 .class 和 ID 选择器 #id 命中目标积木。
2. 样式优先级:命中的多个规则按特定性和源码顺序决定取胜者。
3. 主题变量:CSS 变量在 page 中定义,使用时用 var(...) 引用。
回到积木房:你的装修队不会一块块地单独涂色,而是用“标签枪”(选择器)一次性给所有标有“类名”的积木喷上指定颜色。如果你想换整体风格,只需改动 page 里的主题变量——整栋房子的色调瞬间焕然一新。
/* 类选择器 */.header { background-color: #818CF8; padding: 16rpx; border-radius: 8rpx;} /* 主题变量(CSS 自定义属性) */page { --primary-color: #818CF8; --danger-color: #F43F5E;} .button { background-color: var(--primary-color);}
组件化开发
预制积木块的封装艺术
回到最初搭积木的画面:如果每一栋房子都要从零开始切木头、做窗框、装门铰链,效率会非常低下。真正的积木高手会用“预制积木”——已经组装好的门窗模块,可以在任意项目中直接使用。小程序开发中的组件化,正是这种“预制积木”的工程化实践。
一个自定义组件由四个文件组成:.json(组件配置)、.wxml(结构)、.wxss(样式)、.js(逻辑)。这四件套就像一份完整的“积木说明书+预制块+使用手册”。开发者将常用的功能封装成组件后,可以在页面的任意位置引用,一次编写、处处复用。
在页面中使用这个组件:
关键点在于样式隔离:组件的样式默认不会泄漏到外部,外部的全局样式也无法侵入组件内部。这就像预制积木的墙体自带防水层——外面的雨水进不来,里面的水管漏水也不会影响邻居。如果必须让外部控制组件样式,可以通过 externalClasses 或 styleIsolation 配置实现白名单透传。
主题定制则是更高阶的玩法:通过 CSS 变量 + 组件属性组合,让同一个组件在不同场景下呈现不同的视觉风格——就像同一款预制积木,换个漆色就能融入不同装修风格的房子。
1. 封装三要素:结构(WXML)、样式(WXSS)、逻辑(JS)打包为独立单元。
2. 样式隔离:组件内外样式互相独立,防止污染。
3. 主题定制:通过属性和 CSS 变量让组件适配多种视觉主题。
回到积木房:你最得意的发明是那扇“通用魔法门”——同一款积木门,装在儿童房时是粉色把手(主题A),装在书房时是深色木纹(主题B),但门的结构和开关逻辑完全一样。这就是组件的价值:让制造者专注做一块好积木,让使用者只需决定把积木放在哪面墙上。
<!-- components/custom-button/custom-button.wxml --><view class="custom-btn" style="background: {{bgColor}}"> <slot></slot></view>
<custom-button bgColor="#10B981">确认</custom-button><custom-button bgColor="#F43F5E">删除</custom-button>
AI 应用场景
智能小程序页面辅助生成
阶段:代码生成与模板匹配
解决的问题:传统方式下,开发者需要从零编写每个页面的 WXML 结构和 WXSS 样式,重复劳动量大且容易出错。AI 通过理解自然语言描述,可以自动生成符合小程序规范的 WXML/WXSS 代码,甚至自动选用合适的组件。
具体案例:某电商团队使用大语言模型辅助开发,只需输入“生成一个商品卡片组件,左边图片右边价格和名称,底部加一个收藏按钮”,AI 就能输出对应的 WXML 结构和 WXSS 样式,并自动使用 rpx 单位适配不同屏幕。开发者只需微调细节,开发效率提升约 40%。
设计稿自动转小程序代码
阶段:图像识别与代码合成
解决的问题:设计师交付的视觉稿(PNG/PSD 格式)需要前端手动还原为 WXML/WXSS,流程长且容易产生还原偏差。AI 视觉模型可以识别设计稿中的布局结构、颜色和间距,直接生成可运行的小程序代码。
具体案例:某团队接入了一款基于多模态大模型的“设计稿转代码”工具。输入一张注册页面设计稿,模型自动识别出三个输入框、一个主按钮和一个服务协议链接,生成对应的 WXML 标签、WXSS 样式(包括 rpx 换算、主题色提取),并通过 wx:for 优化了输入框的重复结构。
Python 演示
"""模拟小程序 WXML 模板引擎的核心逻辑:数据绑定、列表渲染、条件渲染的迷你实现。"""import reimport jsonimport itertools class TemplateParser: """一个极简的模板解析器,模拟小程序数据绑定机制""" def __init__(self): self.data = {} # 绑定缓存:状态值 -> 对应变量名列表 self.bind_cache = {} def render_wxml(self, template, data): """ 渲染 WXML 模板: 1. 处理 wx:if 条件渲染 2. 处理 wx:for 列表渲染 3. 处理 {{ }} 数据绑定 """ self.data = data self.bind_cache.clear() result = self._handle_conditions(template) result = self._handle_lists(result) result = self._handle_bindings(result) return result def _handle_conditions(self, template): """模拟 wx:if / wx:elif / wx:else 逻辑""" pattern = r'<view wx:if="\{\{(\w+)\}\}">(.*?)</view>' pattern_elif = r'<view wx:elif="\{\{(\w+)\}\}">(.*?)</view>' pattern_else = r'<view wx:else>(.*?)</view>' def replace_if(match): cond = bool(self.data.get(match.group(1))) return match.group(2) if cond else '' def replace_elif(match): cond = bool(self.data.get(match.group(1))) return match.group(2) if cond else '' def replace_else(match): return match.group(1) template = re.sub(pattern, replace_if, template) template = re.sub(pattern_elif, replace_elif, template) template = re.sub(pattern_else, replace_else, template) return template def _handle_lists(self, template): """模拟 wx:for 列表渲染""" pattern = r'<view wx:for="\{\{(\w+)\}\}">(.*?)</view>' def replace_list(match): list_name = match.group(1) items = self.data.get(list_name, []) inner = match.group(2) return ''.join( inner.replace('{{item}}', str(it)) .replace('{{index}}', str(i)) for i, it in enumerate(items) ) return re.sub(pattern, replace_list, template) def _handle_bindings(self, template): """模拟 {{ }} 最简单数据绑定""" pattern = r'\{\{(\w+)\}\}' def replace_binding(match): var_name = match.group(1) self.bind_cache[var_name] = self.data.get(var_name, '') return str(self.bind_cache[var_name]) return re.sub(pattern, replace_binding, template) if __name__ == '__main__': parser = TemplateParser() page_info = { 'greeting': '欢迎来到积木小屋', 'doorOpen': True, 'userVIP': True, 'photos': ['照片A', '照片B', '照片C'], } wxml_source = """ <view wx:if="{{userVIP}}">{{greeting}}</view> <view wx:else>游客模式</view> <view wx:for="{{photos}}">照片:{{item}} #{{index}}</view> """ print("===== 渲染结果 =====") print(parser.render_wxml(wxml_source, page_info))
class TemplateParser模板解析器的核心类,封装了三种渲染能力。self.bind_cache缓存绑定结果,用_cache后缀避免与类方法render_wxml等产生命名冲突。render_wxml(template, data)总入口方法,依次调用三个处理函数。_handle_conditions(template)用正则匹配wx:if/elif/else,条件为假时直接移除标签块。replace_if(match)根据data中的布尔值决定保留还是清空分支内容。_handle_lists(template)处理wx:for,用enumerate同时拿到索引和元素。inner.replace('{{item}}', ...)模拟小程序中的item和index占位符替换。_handle_bindings(template)最后处理普通{{变量}}绑定,用str()统一转字符串。if __name__ == '__main__':提供可执行入口,演示三种语法同时作用的效果。
常见误区
误区我觉得 `wx:if` 和 `hidden` 都能控制元素显示隐藏,所以性能都一样,哪个顺手就用哪个。有时候元素频繁切换显隐,我就用 `wx:if`,结果页面越来越卡。
正解两者的本质完全不同。wx:if 是“条件性挂载”——条件为假时元素根本不存在于页面结构中,销毁代价高但初始化开销只在真正出现时产生;hidden 则不管条件真假,元素始终存在于 DOM 中,只是通过 display:none 隐藏。比如积木房里的吊灯,wx:if 是不用时把灯拆下来收进储物间,hidden 是灯一直挂在墙上只是拉灭了。频繁切换场景应该用 hidden,因为拆装(创建/销毁)比开关灯(显隐切换)成本高得多。
为何常见:很多从传统 Web 转过来的开发者受 jQuery 时代 show()/hide() 影响,默认只关注“能不能隐藏”而不关心底层实现差异。
误区既然组件的样式是隔离的,那组件内部就不能用任何全局样式了,所有样式都得写在组件自己的 wxss 文件里,外部也完全没法影响组件外观。
正解样式隔离并不是绝对的黑盒。小程序提供 externalClasses(外部样式类)和 styleIsolation: 'apply-shared' 等机制允许白名单式的样式透传。更理性地看,“隔离”是有意设计的工程约束——默认隔离保证组件不受外部污染,但需要定制时通过信使(externalClasses)传递有限样式。这和现实中的预制积木一样:门是标准件,但允许客户在门板上换把手和漆色,而不允许拆掉门框结构(内部实现)。
为何常见:初学者容易望文生义,把“隔离”理解成“封闭”,忽略了文档中关于例外条款的说明。
误区rpx 就是 px 的别名,写 750rpx 就是写 750px,在电脑的开发者工具里显示什么样真机上就是什么样。
正解rpx 是相对单位,它的核心逻辑是“视图宽度恒为 750rpx”。在 375px 宽的手机上,1rpx = 0.5px,所以 750rpx 恰好装满整个屏幕宽度。但在 414px 宽的手机上,1rpx ≈ 0.55px,750rpx 依然恰好装满屏幕。真正的好处是不需要写媒体查询就能适配所有屏幕。但要注意:rpx 不适用于 1px 的物理细线需求(因为某些设备上 1rpx 可能小于 1 物理像素导致渲染模糊),此时需要用固定 px 或 transform: scale() 技巧。
为何常见:因为数字一样(750),开发者工具和 iPhone 6/7/8 上 750rpx 恰好等于 375px,导致很多人误以为它们是同一个东西。
误区如果我写一个组件只是展示一些静态的 UI,不需要任何交互,那我还不如直接复制粘贴 WXML 片段,用普通 view 就行,没必要搞成组件。
正解组件化带来的价值不仅仅是逻辑复用,还包括结构复用和样式复用。即使一个组件完全没有 JS 逻辑(无状态展示型组件),将其封装成组件仍然能获得:统一修改入口(改一处全项目生效)、样式隔离保护、Slot 插槽扩展能力。就像一块没有电子元件的标准积木门——它依然是有价值的预制件,因为统一规格让整个积木房的模块化成为可能。
为何常见:开发者容易把“组件”误解为“带逻辑的功能块”,而忽略了工程化中“复用”和“统一”的核心价值。
面试题
Q1. WXML 中小程序页面的结构类似于以下哪种网页语言?
- A.HTML 标记语言← 正确答案
- B.CSS 样式语言
- C.JavaScript 脚本语言
- D.Python 编程语言
答案:A。WXML 是标记语言,结构上类似 HTML,使用标签描述页面骨架。CSS 和 JavaScript 分别对应 WXSS 和 JS 层的职责,Python 则完全不相关。
Q2. 小程序 WXML 中数据绑定的标准语法是?
- A.${变量名}
- B.{{变量名}}← 正确答案
- C.#{变量名}
- D.@{变量名}
答案:B。双大括号 {{ }} 是 WXML 数据绑定专用语法(Mustache 模板风格),类似于在墙体上预留数据插槽。${} 是 ES6 模板字符串语法,#{} 是 Ruby 语法,@{} 不存在于小程序规范中。
Q3. wx:for 指令中,默认的当前项变量名和索引变量名是?
- A.value 和 key
- B.data 和 num
- C.item 和 index← 正确答案
- D.element 和 position
答案:C。wx:for 默认把当前项暴露为 item,索引暴露为 index。这和积木流水线上的“工位内容”和“工位号”对应,是框架预设的默认命名规则。
Q4. 关于 wx:if 和 hidden 的区别,以下哪种说法最准确?
- A.两者都是通过 display:none 实现隐藏
- B.wx:if 条件为假时元素不渲染,hidden 仅隐藏但元素存在← 正确答案
- C.hidden 条件为假时元素不渲染,性能更优
- D.两者完全等价,可以互换使用
答案:B。wx:if 是条件性挂载,假值时元素不存在于页面结构中(拆下积木);hidden 是 CSS 显示隐藏,元素始终存在(灯还挂着只是熄灭了)。频繁切换场景用 hidden 更高效,因为避免重复创建销毁。
Q5. 在屏幕宽度为 375px 的设备上,750rpx 对应的实际像素宽度是?
- A.375px← 正确答案
- B.750px
- C.187.5px
- D.100px
答案:A。所有设备屏幕宽度恒定为 750rpx,所以 375px 宽屏幕上 1rpx = 375/750 = 0.5px,750rpx = 750 × 0.5 = 375px,恰好等于整个屏幕宽度。这是 rpx 自适应设计的核心。
Q6. 下面哪些是自定义组件四个文件的组成部分?
- A..json 配置文件← 正确答案
- B..wxml 结构文件← 正确答案
- C..wxss 样式文件← 正确答案
- D..md 文档文件
答案:ABC。自定义组件四件套为 .json(配置)、.wxml(结构)、.wxss(样式)、.js(逻辑)。.md 是 Markdown 文档文件,不参与组件工程结构。
Q7. 关于组件样式隔离,以下哪种说法最正确?
- A.组件内可随意使用外部全局样式类
- B.外部样式无法以任何方式影响组件内部
- C.默认隔离但可用 externalClasses 白名单透传← 正确答案
- D.样式隔离只影响字体不影响布局
答案:C。默认各组件的样式互相隔离,防止污染,但提供了 externalClasses 和 styleIsolation: 'apply-shared' 等例外机制。白名单透传的比喻:门是标准件但允许客户换把手——受控定制,而非绝对封闭。
Q8. WXSS 中关于主题变量的使用,哪些说法是正确的?
- A.主题变量用
--变量名语法定义← 正确答案 - B.地方使用
var(--变量名)引用变量← 正确答案 - C.主题变量只能在 page 选择器中定义
- D.变量可以简化全局换肤操作← 正确答案
答案:ABD。CSS 自定义属性用 --name 定义,var(--name) 引用,可定义在 page 选择器或任意规则块中,并非只能定义在 page 中。通过改变变量值实现全局换肤,是主题定制的核心思路。
Q9. wx:key 在列表渲染中的主要作用是?
- A.改变列表的排列顺序
- B.为每个项提供稳定唯一身份,优化更新性能← 正确答案
- C.控制列表项的显示样式
- D.限制列表最大渲染数量
答案:B。wx:key 给每个渲染项一个“身份证号”(唯一标识),框架据此判断哪些项需要被复用、更新或删除,避免全部重新渲染导致性能浪费。它不控制顺序、样式或数量。
Q10. 以下哪些是 WXML 支持的渲染能力?
- A.数据绑定双大括号← 正确答案
- B.wx:for 列表循环← 正确答案
- C.wx:if 条件判断← 正确答案
- D.SQL 数据库查询
答案:ABC。WXML 三大核心渲染能力是数据绑定、列表渲染(wx:for)、条件渲染(wx:if/elif/else)。SQL 是数据库查询语言,与视图层渲染无关。