uni-app switch组件android平台无限闪动bug
uni-app switch组件android平台无限闪动bug
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Mac | 12.0.1 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Mac
HBuilderX类型:正式
HBuilderX版本号:3.4.7
手机系统:Android
手机系统版本号:Android 10
手机厂商:小米
手机机型:k30
页面类型:nvue
vue版本:vue2
打包方式:云端
项目创建方式:HBuilderX
示例代码:
<template>
<view class="" style="margin-top: 100px;" >
<switch :checked="busyStatus" />
<text @click="onClick">点击</text>
</view>
</template>
<script>
export default {
components:{
},
data() {
return {
busyStatus:true
}
},
methods: {
onClick(e) {
this.busyStatus=!this.busyStatus
}
}
}
</script>
操作步骤:
按代码执行即可
预期结果:
正常使用
实际结果:
无法正常使用
bug描述:
android,动态切换checked后,android系统无限循环闪动了,目前测试了小米,华为,vivo,都有这个问题
更多关于uni-app switch组件android平台无限闪动bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html
4 回复
问题复现,已反馈给相关人员排查,已加分感谢反馈!
更多关于uni-app switch组件android平台无限闪动bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html
3.4.11 alpha 已修复
谢谢
在 uni-app 中使用 switch
组件时,如果遇到在 Android 平台上无限闪动的问题,可能是由于以下原因导致的:
1. 数据绑定问题
- 原因: 如果
switch
组件的checked
属性与数据绑定不当,可能会导致状态不断切换,从而引发闪动。 - 解决方案: 确保
checked
属性的绑定数据在切换时正确更新,并且不要在同一时间多次触发状态变化。
<template>
<switch :checked="isChecked" @change="handleSwitchChange" />
</template>
<script>
export default {
data() {
return {
isChecked: false
};
},
methods: {
handleSwitchChange(e) {
this.isChecked = e.detail.value;
}
}
};
</script>
2. 异步操作导致的状态不一致
- 原因: 如果在
switch
的change
事件中执行了异步操作(如网络请求),并且异步操作完成后更新了checked
状态,可能会导致状态不一致,从而引发闪动。 - 解决方案: 确保异步操作完成后正确更新状态,或者在异步操作期间禁用
switch
组件。
<template>
<switch :checked="isChecked" @change="handleSwitchChange" :disabled="isLoading" />
</template>
<script>
export default {
data() {
return {
isChecked: false,
isLoading: false
};
},
methods: {
handleSwitchChange(e) {
this.isLoading = true;
const newValue = e.detail.value;
// 模拟异步操作
setTimeout(() => {
this.isChecked = newValue;
this.isLoading = false;
}, 1000);
}
}
};
</script>
3. 样式冲突
- 原因: 自定义样式或第三方样式库可能与
switch
组件的默认样式冲突,导致渲染异常。 - 解决方案: 检查并调整样式,确保不会影响
switch
组件的正常渲染。
/* 确保没有全局样式影响 switch 组件 */
switch {
/* 自定义样式 */
}
4. uni-app 版本问题
- 原因: 旧版本的 uni-app 可能存在
switch
组件的兼容性问题。 - 解决方案: 更新 uni-app 到最新版本,确保使用的是最新的稳定版本。
npm update [@dcloudio](/user/dcloudio)/uni-app
5. 平台差异
- 原因: Android 和 iOS 平台在渲染
switch
组件时可能存在差异,导致在 Android 平台上出现闪动。 - 解决方案: 使用条件编译针对不同平台进行特殊处理。
<template>
<switch :checked="isChecked" @change="handleSwitchChange" />
</template>
<script>
export default {
data() {
return {
isChecked: false
};
},
methods: {
handleSwitchChange(e) {
#ifdef APP-PLUS
// 针对 Android 平台的特殊处理
if (plus.os.name === 'Android') {
// 添加额外的逻辑
}
#endif
this.isChecked = e.detail.value;
}
}
};
</script>
6. 自定义组件封装问题
- 原因: 如果
switch
组件被封装在自定义组件中,可能会导致事件传递或状态管理出现问题。 - 解决方案: 确保自定义组件中正确传递
checked
属性和change
事件。
<!-- CustomSwitch.vue -->
<template>
<switch :checked="checked" @change="$emit('change', $event)" />
</template>
<script>
export default {
props: {
checked: Boolean
}
};
</script>
<!-- 使用自定义组件 -->
<template>
<custom-switch :checked="isChecked" @change="handleSwitchChange" />
</template>
<script>
import CustomSwitch from './CustomSwitch.vue';
export default {
components: {
CustomSwitch
},
data() {
return {
isChecked: false
};
},
methods: {
handleSwitchChange(e) {
this.isChecked = e.detail.value;
}
}
};
</script>