uni-app 递归组件在H5页面正常,但以5+app、小程序运行时无法正常递归构建,只能构建第一层【已解决】。
uni-app 递归组件在H5页面正常,但以5+app、小程序运行时无法正常递归构建,只能构建第一层【已解决】。
详细问题描述
(DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题)
构建树形结构组件,节点使用递归组件方式构建。H5页面可以正常构建出树形结构层级,以5+app、小程序运行,只能构建第一层,无法递归渲染构建更深节点。放置静态文字“123”,发现文字显示正常,说明只是深层组件递归构建问题。样例代码见附件。
重现步骤
[步骤] [结果] [期望] [如果语言难以表述清晰,拍一个视频或截图,有图有真相]
IDE运行环境说明
环境 | 版本号 |
---|---|
HBuilder 或 HBuilderX | [IDE版本号] |
windows版本号 | [windows版本号] |
mac版本号 | [mac版本号] |
uni-app运行环境说明
运行环境 | 版本号 |
---|---|
h5或app或某个小程序 | [运行端版本号] |
App运行环境说明
环境 | 版本号 |
---|---|
Android版本号 | [Android版本号] |
iOS版本号 | [iOS版本号] |
手机型号 | [手机型号] |
模拟器型号 | [模拟器型号] |
附件
联系方式
[QQ] 32758498
组件的递归调用,支持的平台为 H5 以及微信小程序,微信小程序平台需开启编译为微信小程序原生组件。https://uniapp.dcloud.io/collocation/manifest?id=mp-weixin
支持递归调用的组件,需要在 globalStyle->usingComponents 中声明。例如:
“globalStyle”: {
“navigationBarTextStyle”: “black”,
“navigationBarTitleText”: “uni-app”,
“navigationBarBackgroundColor”: “#F8F8F8”,
“backgroundColor”: “#F8F8F8”,
“usingComponents”: {
“collapse-tree-item”:"/components/collapse-tree-item"
}
}
HBuilderX 1.8.0 已修复此问题,cli 已同步更新。
更新:HBuilderX alpha 1.8.5公测啦!uni-app App平台 升级为新版编译器,提升启动速度、提升组件性能、支持过滤器等更多vue语法。
也就是说5+APP,不支持递归
更新到1.8.1.20190330,5+APP,依然不行
回复 yxinlai:目前 App 端不支持,已经在做相关的强化工作,请持续关注更新。
回复 Trust:期待早日实现
回复 yxinlai:1.8.5 alpha 版已更新
回复 Trust:需要特殊配置设置么?
测试发现,HX1.9.0版本已经支持H5、微信小程序、APP三端的组件递归了。若未在globalStyle中声明,则仅H5支持;若已在globalStyle端声明,则H5、微信小程序、APP三端都支持。
都2023年了还不行吗
出现类似的同样的问题,小程序本身是支持递归的,应该是编译过程中有什么问题了。
为啥App里不支持呢,这样感觉好鸡肋的,技术上有什么实现障碍?
求app支持!
组件明明存在,怎么还是报错
现在需要在manifest中添加:“usingComponents”:true才能正确编译
回复 4***@qq.com: app端可以吗
为啥 递归组件 中传递 函数 无法使用呢?
请问下你们的组件递归调用实现了吗
现在app端还支持吗
请问解决了吗?怎么做的呢
目前测试,APP内递归怎么还不支持呢?现在支持了吗?
是啊,都2023年了还是不行吗?大道都要磨灭了(
就算是使用了"usingComponents":true,支持递归了,对于.sync支持也不好,建议把代码复制一份,起个不同的名字,组件相互引用.就可以不用"usingComponents":true
请问解决了吗?怎么做的呢
在处理uni-app中递归组件在不同平台表现不一致的问题时,通常需要考虑平台间的兼容性和组件渲染机制上的差异。虽然你提到问题已解决,但为了分享给其他可能遇到类似问题的开发者,这里提供一个可能的解决方案示例,展示如何通过调整递归组件的代码,确保其在H5、5+App以及小程序上都能正确渲染。
递归组件示例
假设我们有一个简单的评论列表组件,每个评论下可能还嵌套有其他评论,形成一个递归结构。
1. 定义递归组件
首先,定义一个名为Comment
的递归组件。
<template>
<view class="comment">
<text>{{ comment.content }}</text>
<view v-if="comment.replies && comment.replies.length" class="replies">
<comment
v-for="(reply, index) in comment.replies"
:key="index"
:comment="reply"
></comment>
</view>
</view>
</template>
<script>
export default {
name: 'Comment',
props: {
comment: Object
}
}
</script>
<style scoped>
.comment {
margin-left: 20px;
}
.replies {
margin-top: 10px;
}
</style>
2. 使用递归组件
在父组件中使用这个递归组件,并传入初始评论数据。
<template>
<view>
<comment :comment="initialComment"></comment>
</view>
</template>
<script>
import Comment from './components/Comment.vue';
export default {
components: {
Comment
},
data() {
return {
initialComment: {
content: 'This is a top-level comment.',
replies: [
{
content: 'This is a reply.',
replies: []
},
// 更多嵌套回复...
]
}
};
}
}
</script>
3. 注意事项与调试
- 平台差异:确保所有平台(H5、5+App、小程序)的uni-app SDK都是最新的,因为旧版本可能存在未修复的bug。
- 性能优化:对于深层嵌套的递归组件,考虑使用虚拟滚动等技术来优化性能,尤其是在小程序上。
- 调试工具:利用uni-app提供的开发者工具进行跨平台调试,观察渲染树和日志输出,定位问题。
通过上述示例和注意事项,开发者可以更好地理解和解决递归组件在不同平台上的渲染问题。如果你已经找到了特定的解决方案,确保你的代码逻辑清晰,并且兼容所有目标平台。