Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

微信小程序 调试基础库 2.18.1 循环里面带有 空的slot 会报大量警告 循环次数过多可能造成调试工具假死 #2782

Closed
yuconora opened this issue Jul 28, 2021 · 22 comments

Comments

@yuconora
Copy link

问题描述
编译成微信小程序 当在文件中使用 解构插槽 Prop 微信调试基础库版本号为 2.18.1 会报 大量 警告 ,页面复杂调试工具可能卡死
复现步骤
[复现问题的步骤]
1.hbuilderx 新建一个 uniapp 项目
新建一个组件Test.vue

// Test.vue
<template>
	<view>
		<block v-for="(item, index) in list" :key="index">
			<slot :item="item"></slot>
		</block>
	</view>
</template>

<script>
export default {
	name: 'Test',
	data() {
		return {
			list: []
		};
	},
	mounted() {
		// length过大 调试工具会报大量警告 可能卡死
		const length = 10
		const list = Array(length).fill(0).map((_item, index) => index)
		this.list = list.slice()
	},
	methods: {}
};
</script>

<style></style>

修改 index.vue 代码 引入 Test 组件

// index.vue
<template>
	<view class="content">
		<test ref="test">
			<template #default="{item}">
				<view class="item" :id="item">{{item}}</view>
			</template>
		</test>
	</view>
</template>

<script>
import Test from '@/components/Test.vue';
export default {
	data() {
		return {
			title: 'Hello'
		};
	},
	components: {
		Test
	},
	methods: {}
};
</script>

<style>
.item {
	width: 100%;
	height: 160rpx;
	background-color: #4cd964;
	padding: 16px;
	box-sizing: border-box;
	margin-bottom: 10px;
}
</style>
  1. hbuilderx 工具栏选择 -》运行 -》运行到小程序模拟器 -》微信开发工具
    微信开发工具选择调试基础库版本 2.18.1

截屏2021-07-28 15 43 03

调试窗口 console 里面可以看到大量警告

截屏2021-07-28 15 40 54

预期结果
可以去除多余的slot 消除警告

实际结果
由于警告过多 页面渲染慢 调试工具可能卡死

系统信息:

  • 发行平台: 微信小程序
  • HBuilderX版本 3.1.22.20210709

补充信息
由于微信不支持在循环(wx:for)里面嵌套同名(匿名)slot 而这种情况能用抽象节点的形式来分发内容
截屏2021-07-28 16 50 40

uniapp在 v2.0.0-28520200811001版本 之后 总会返回一个默认插槽 支持作用域插槽当作普通插槽使用 当升级到最新的微信调试基础库(目前 2.18.1) 就会导致这个问题的出现

这个地方是否考虑做一下兼容性调整? 由于目前项目中没有 作用域插槽当作普通插槽使用 这种情况 删掉了返回的默认插槽 项目调试正常

createScopedSlots (slotName, props, state) {
const componentName = 'scoped-slots-' + slotName
if (!state.componentGenerics) {
state.componentGenerics = Object.create(null)
}
state.componentGenerics[componentName] = true
const attr = props || {}
if (state.options.platform.name === 'mp-weixin') {
attr.class = 'scoped-ref'
}
// 返回多个节点,支持作用域插槽当作普通插槽使用
return [{
type: 'slot',
attr: {
name: slotName
},
children: []
},
{
type: componentName,
attr,
children: []
}
]
},

@zhetengbiji
Copy link
Collaborator

zhetengbiji commented Aug 9, 2021

直接使用普通插槽在微信工具内测试问题复现。

准备了一个代码片段,已反馈到微信小程序社区。

https://developers.weixin.qq.com/community/develop/doc/000c84808644485f1a9c9fa1f56800

@xiaofuliang
Copy link

请问解决没,头大!!,现在列表数据多卡的要死了。。。

@zhetengbiji
Copy link
Collaborator

请问解决没,头大!!,现在列表数据多卡的要死了。。。

可以先切换一下基础库版本到 2.17,切换后记得重启一下微信小程序开发工具。

@dopeisqu
Copy link

dopeisqu commented Sep 2, 2021

本地可以切换基础库调试,线上处理不了呀

@xiaofuliang
Copy link

@zhetengbiji 老是切换基础库版本也不是办法呀,你官方提的那个问题官方也不给处理,怎么办可好。 。。

@zhetengbiji
Copy link
Collaborator

@zhetengbiji 老是切换基础库版本也不是办法呀,你官方提的那个问题官方也不给处理,怎么办可好。 。。

我又去反馈了一下,关注的人多了,应该有效果。

@xiaofuliang
Copy link

@zhetengbiji 反馈的链接发出来下,我也去关注下。。

@zhetengbiji
Copy link
Collaborator

@zhetengbiji 反馈的链接发出来下,我也去关注下。。

https://developers.weixin.qq.com/community/develop/doc/000c84808644485f1a9c9fa1f56800

@zhetengbiji
Copy link
Collaborator

本地可以切换基础库调试,线上处理不了呀

这个警告打印应该只是卡死本地调试工具,线上也有影响吗?

@xiaofuliang
Copy link

本地可以切换基础库调试,线上处理不了呀

这个警告打印应该只是卡死本地调试工具,线上也有影响吗?

线上也会卡,我现在列表用的插槽,进到列表要过个10秒左右才会渲染,而且控制台会一直打出警告

@zhetengbiji
Copy link
Collaborator

本地可以切换基础库调试,线上处理不了呀

这个警告打印应该只是卡死本地调试工具,线上也有影响吗?

线上也会卡,我现在列表用的插槽,进到列表要过个10秒左右才会渲染,而且控制台会一直打出警告

线上怎么有控制台?

@dopeisqu
Copy link

dopeisqu commented Sep 7, 2021

本地可以切换基础库调试,线上处理不了呀

这个警告打印应该只是卡死本地调试工具,线上也有影响吗?

线上也会卡,我现在列表用的插槽,进到列表要过个10秒左右才会渲染,而且控制台会一直打出警告

线上怎么有控制台?

数据多的时候会白屏一段时间

@xiaofuliang
Copy link

本地可以切换基础库调试,线上处理不了呀

这个警告打印应该只是卡死本地调试工具,线上也有影响吗?

线上也会卡,我现在列表用的插槽,进到列表要过个10秒左右才会渲染,而且控制台会一直打出警告

线上怎么有控制台?

开发者开启了开发调试看的。。

@zhetengbiji
Copy link
Collaborator

本地可以切换基础库调试,线上处理不了呀

这个警告打印应该只是卡死本地调试工具,线上也有影响吗?

线上也会卡,我现在列表用的插槽,进到列表要过个10秒左右才会渲染,而且控制台会一直打出警告

线上怎么有控制台?

数据多的时候会白屏一段时间

之前发布的版本,在微信客户端更新后受到了影响吗?

@zhetengbiji
Copy link
Collaborator

本地可以切换基础库调试,线上处理不了呀

这个警告打印应该只是卡死本地调试工具,线上也有影响吗?

线上也会卡,我现在列表用的插槽,进到列表要过个10秒左右才会渲染,而且控制台会一直打出警告

线上怎么有控制台?

开发者开启了开发调试看的。。

之前发布的正式版本是否受到了影响?

@xiaofuliang
Copy link

本地可以切换基础库调试,线上处理不了呀

这个警告打印应该只是卡死本地调试工具,线上也有影响吗?

线上也会卡,我现在列表用的插槽,进到列表要过个10秒左右才会渲染,而且控制台会一直打出警告

线上怎么有控制台?

开发者开启了开发调试看的。。

之前发布的正式版本是否受到了影响?

我试过推送调试基础库2.173版本到手机上用,是没有啥影响的,也不会要等待,不会有控制台警告打出

@JesseChain
Copy link

JesseChain commented Sep 27, 2021

如果影响到线上了,可以试着给warn方法赋值空函数
console.warn = noop

@Leeiio
Copy link

Leeiio commented Nov 8, 2021

这个问题有进展了吗

@zhetengbiji
Copy link
Collaborator

这个问题有进展了吗

暂无,微信小程序官方已不再回复,后续会考虑绕过办法。

@zhetengbiji
Copy link
Collaborator

微信开发者工具已优化,此问题关闭

@monkeying-boy
Copy link

微信开发者工具已优化,此问题关闭

把微信开发者工具升级到最新后,虽然不会报错提醒,但是打包成微信小程序后页面实际还是不能正确获取到插槽参数,h5 是正常的。

问题:在循环中使用 slot 导致无法正确获取到插槽提供的参数。

项目版本 @dcloudio/uni-app : "2.0.2-3070320230222001"

@zhetengbiji
Copy link
Collaborator

微信开发者工具已优化,此问题关闭

把微信开发者工具升级到最新后,虽然不会报错提醒,但是打包成微信小程序后页面实际还是不能正确获取到插槽参数,h5 是正常的。

问题:在循环中使用 slot 导致无法正确获取到插槽提供的参数。

项目版本 @dcloudio/uni-app : "2.0.2-3070320230222001"

后续会优化,问题跟进参考:#3503

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants