组件嵌套组件尽量只搞一层

位置:首页 / 技术中心 / 微信小程序原生

微信小程序原生 Admin 2026-07-31 10:06:50 5

微信小程序原生前端专家


思考过程


准确说是: 组件里面不是不能再创建组件,而是不要嵌套太深。


你刚才说的“组件里的页面”可能口误了,页面是不会放到组件里的。正确的理解应该是:

 组件里面可以套组件,但尽量只套 1 层,最多 2 层,不要到 3 层及以上。

## 正确做法

### ✅ 页面里用组件(1 层,推荐)

这是最常见、最推荐的方式。比如你的 caseDetails 页面用 plan 、 follow 组件。


### ✅ 组件里再套组件(2 层,可接受)

这种情况也合理,比如一个复杂的卡片组件里封装了一个标签组件。


### ⚠️ 组件里套组件再套组件(3 层,谨慎)

到了 3 层,路径变深、事件传递变复杂,除非有明确复用需求,否则建议拍平。


## 拍平的核心判断标准

不是说“组件里不能放组件”,而是看:


情况 建议 组件 B 只被组件 A 用 可以放在 A/components/B 下(2 层) 组件 B 同时被页面或其他组件用 提到和 A 同级,或提到页面 components/ 下 组件 B 只是组件 A 的很小一部分 直接内联到 A 的 wxml 里,不必单独拆组件


## 回到你项目

你之前的问题不是“组件里不能有组件”,而是:


所以把 targetExplain 从 plan/components/ 提到 caseDetails/components/ ,变成:


这样所有组件都是页面直接引用,结构最清晰。


总结一句话:组件可以套组件,但嵌套要浅;一旦某个子组件被页面直接引用或被多处复用,就该把它提升上来,不要藏太深。


10:03

小黄学长


为什么不建议套太深,是因为一但深层的组件出现问题,不方便开发者定位到出现问题的地方


微信小程序原生前端专家


思考过程


对, 不方便定位问题 是其中一个重要原因,但不止这一个。


你理解的这部分是对的:嵌套越深,出问题的时候要一层一层往下追,才能找到到底是哪一层组件坏了。比如:


你要先打开页面 WXML,找到 A;再打开 A 的 WXML,找到 B;再打开 B 的 WXML,才能看到 C。排查路径很长。


但除了“定位麻烦”,还有几个关键原因:


## 1. 事件传递容易断链

微信小程序里,子组件向父组件传数据要用 triggerEvent 。如果套了 3 层:


中间任何一层忘记 triggerEvent ,或者事件名拼错了,数据就传不上来。层数越多,越容易漏。


## 2. 数据流难追踪

页面把数据往下传,要经过多层 properties 。比如:


后来改代码时,你很难一眼看出 C 里的 name 最初是从哪来的。而 1 层嵌套时,直接在页面 WXML 里就能看到 <case-info name="{{name}}"/> 。


## 3. 引用路径容易写错

路径越深,写错概率越高。比如:


手滑少写一个 components 或把 plan 写成 plans ,开发者工具就报“组件未找到”。拍平后路径短一半:


```

./components/targetExplain/targetExplain

```

## 4. 重构成本高

如果某天 C 组件要改名字、要迁移位置、要被别的页面复用,深嵌套时你得改很多地方:


- C 自己的路径

- B 里的引用

- B 里的事件转发

- 页面里的数据透传

层数越多,改动点越多。


## 5. 可读性下降

新员工看代码时,1 层嵌套一眼就能看懂页面结构:


```

<plan-panel />

<follow-panel />

<case-info />

```

3 层嵌套时,他不点开每个组件,根本不知道该页面到底由哪些 UI 组成。


## 总结

你说的“不方便定位问题”是核心原因之一,另外还包括:

 事件传递容易断、数据流难追踪、路径容易写错、重构成本高、可读性差。

所以不是“组件里不能放组件”,而是 每多一层嵌套,维护成本就会明显上升 。能用 1 层解决的,不要用 2 层;能用 2 层解决的,尽量别上 3 层。

18455111359 扫描二维码