2***@qq.com
2***@qq.com
  • 发布:2022-10-12 18:08
  • 更新:2022-10-27 21:03
  • 阅读:588

【报Bug】B页面退回A页面,点击事件无响应

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 12.5

HBuilderX类型: 正式

HBuilderX版本号: 3.6.4

手机系统: 全部

手机厂商: 华为

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

App下载地址或H5⽹址: https://vkceyugu.cdn.bspapp.com/VKCEYUGU-6e7b238c-0a61-4c73-a0fe-4ac471fc85ce/6acce671-2821-4954-bb30-1e6ea043a452.apk

测试过的手机:

所有机型必现

示例代码:

A页面代码(列表页面)

<template>  
    <view class="content">  
        <block v-for="item in test" :key="item.sellId">  
            <item @click="handlerClick(item)" :title="item.title">  
            </item>  
        </block>  
    </view>  
</template>  

<script>  
    import item from './components/item.vue'  

    export default {  
        components: {  
            item,  
        },  
        data() {  
            return {  
                test: [{  
                        sellId: '1',  
                        name: '名称1',  
                        title: '标题1',  
                    },  
                    {  
                        sellId: '2',  
                        name: '名称2',  
                        title: '标题2',  
                    },  
                    {  
                        sellId: '3',  
                        name: '名称3',  
                        title: '标题3',  
                    },  
                    {  
                        sellId: '4',  
                        name: '名称4',  
                        title: '标题4',  
                    },  
                ]  
            }  
        },  
        onLoad() {  
            uni.$on('item-test', this.updateData)  
        },  
        methods: {  
            updateData({  
                sellId  
            }) {  
                console.log('on-sellId', sellId)  

                const selectIdx = this.test.findIndex((v) => v.sellId === sellId)  
                if (selectIdx === -1) return  
                this.test.splice(selectIdx, 1)  
            },  
            handlerClick(item) {  
                console.log('item', item)  
                const url = `/pages/index/detail?id=${item.sellId}`  
                uni.navigateTo({  
                    url,  
                })  
            }  
        }  
    }  
</script>

B页面代码(详情页面)

<template>  
    <view class="detail">  
        <image class="logo" src="/static/logo.png"></image>  
        <view class="text-area">  
            <text class="id">sellId是{{id}}</text>  
        </view>  
        <view class="text-area" @click="handlerBack">  
            <text class="id">emit通信,点击回退上个页面,带sellId回去</text>  
        </view>  
    </view>  
</template>  

<script>  
    export default {  
        data() {  
            return {  
                id: ''  
            }  
        },  
        onLoad(options) {  
            const {  
                id = ''  
            } = options || {}  
            console.log('id,', id)  
            this.id = id  
        },  
        methods: {  
            handlerBack() {  
                uni.$emit('item-test', {  
                    sellId: this.id  
                })  
                uni.navigateBack()  
            }  
        }  
    }  
</script>

A页面组件代码

<template>  
    <view class="item" @click="handlerClick">  
        <image class="logo" src="/static/logo.png"></image>  
        <view class="text-area">  
            <text class="title">{{title}}</text>  
        </view>  
    </view>  
</template>  

<script>  
    export default {  
        name: 'item',  
        props: {  
            title: {  
                type: String,  
                default: '',  
            },  
        },  
        methods: {  
            handlerClick() {  
                console.log('components-click')  
                this.$emit('click')  
            },  
        },  
    }  
</script>

操作步骤:
  1. A页面有一个数组,一共有4条数据,用封装好的一个组件进行for循环,然后点击列表的第一条数据,进入B页面。
  2. B页面点击回退到上个(A)页面,利用 emit 进行页面通信。
  3. 回到A页面,利用 on 监听到事件,进行A页面数组删除操作,把刚点击列表的第一条数据删除,利用 splice 进行删除。
  4. A页面第一条数据删除了,列表渲染未删除的三条数据。
  5. 列表渲染未删除的三条数据的点击事件无响应了。

预期结果:

列表渲染未删除的三条数据点击事件正常操作。

实际结果:

列表渲染未删除的三条数据的点击事件无响应了

bug描述:

业务场景:

  1. 订单列表页面一共有4条数据,点击某一条可以进入订单详情页面。
  2. 详情页面可以进行删除此订单操作,删除此订单后,自动回退到订单列表页面。
  3. 回到订单列表,并且刷新订单列表页面数据,又继续回到第一步操作。
    BUG问题是:
    第三步后,列表渲染未删除数据的点击事件无响应了。
2022-10-12 18:08 负责人:DCloud_UNI_GSQ 分享
已邀请:
DCloud_UNI_Anne

DCloud_UNI_Anne

问题复现,已转相关人员排查,已加分感谢反馈!

DCloud_UNI_GSQ

DCloud_UNI_GSQ

后续将会修复

临时解决方案:使用index作为key

<block v-for="(item,index) in test" :key="index">
DCloud_UNI_Anne

DCloud_UNI_Anne

HBuilderX3.6.8-alpha已修复

该问题目前已经被锁定, 无法添加新回复