2***@qq.com
2***@qq.com
  • 发布:2025-11-11 15:11
  • 更新:2025-11-12 11:16
  • 阅读:28

【报Bug】unicloud-db修改数据后,返回数据未更新

分类:uniCloud

产品分类: uniCloud/App

操作步骤:

列表页面

<template>  
    <view>  
        <unicloud-db ref="dbRef" v-slot:default="{data, loading, error, options}" collection="connect">  
            <view v-if="error">{{error.message}}</view>  
            <view v-else>  
                <uni-list>  
                    <uni-list-item v-for="item in data" :key="item._id"  
                        :title="item.name"  
                        :note="item.tel"   
                        showArrow  
                        clickable  
                        @click.native="toNext('/pages/test/update?item='+JSON.stringify(item))">  
                    </uni-list-item>  
                </uni-list>  
            </view>  
        </unicloud-db>  
    </view>  
</template>  

<script setup>  
import {ref} from "vue"  
import {onShow} from "@dcloudio/uni-app"  

const dbRef = ref();  

onShow(() => {  
    dbRef.value?.refresh();  
})  

const toNext = (url) => {  
    uni.navigateTo({  
        url  
    })  
}  

</script>  

<style>  

</style>  

修改页面:

<template>  
    <view>  
        <uni-easyinput  v-model="_d.form.name" placeholder="姓名" />  
        <uni-easyinput  v-model="_d.form.tel" placeholder="电话" />  
        <button @click="handleUpdate">修改</button>  
    </view>  
</template>  

<script setup>  
import {reactive} from "vue";  
import {onLoad} from "@dcloudio/uni-app"  

const _d = reactive({  
    form: {_id: '',name: '',tel: '',}  
})  
onLoad(options => {  
    _d.form = JSON.parse(options.item);  
})  
const handleUpdate = () => {  
    const db = uniCloud.database();  
    let params = {..._d.form};  
    delete params._id  
    db.collection('connect').doc(_d.form._id).update(params).then(res => {  
        if(res.result.errCode == 0) {  
            uni.navigateBack()  
        }  
    })  
}  

</script>  

<style>  

</style>  

预期结果:

这种列表页跳修改页面后,在返回列表页时,应该是onShow更新列表,无感刷新。

实际结果:

单独使用 unicloud-db 修改后不会更新数据。使用onShow配合dbRef.value?.refresh();又会清空页面,造成闪动。

bug描述:

unicloud-db修改数据后,返回数据未更新。

列表页面使用:unicloud-db显示列表。从列表页面进入修改页面,然后修改了内容后。返回列表页面,数据没有更新。

列表页面。

<unicloud-db ref="dbRef" v-slot:default="{data, loading, error, options}" collection="connect">  
    <view v-if="error">{{error.message}}</view>  
    <view v-else>  
        <uni-list>  
            <uni-list-item v-for="item in data" :key="item._id"  
                :title="item.name"  
                :note="item.tel"   
                showArrow  
                clickable  
                @click.native="toNext('/pages/test/update?item='+JSON.stringify(item))">  
            </uni-list-item>  
        </uni-list>  
    </view>  
</unicloud-db>

修改页面。

<template>  
    <view>  
        <uni-easyinput  v-model="_d.form.name" placeholder="姓名" />  
        <uni-easyinput  v-model="_d.form.tel" placeholder="电话" />  
        <button @click="handleUpdate">修改</button>  
    </view>  
</template>  

<script setup>  
import {reactive} from "vue";  
import {onLoad} from "@dcloudio/uni-app"  

const _d = reactive({  
    form: {_id: '',name: '',tel: '',}  
})  
onLoad(options => {  
    _d.form = JSON.parse(options.item);  
})  
const handleUpdate = () => {  
    const db = uniCloud.database();  
    let params = {..._d.form};  
    delete params._id  
    db.collection('connect').doc(_d.form._id).update(params).then(res => {  
        if(res.result.errCode == 0) {  
            uni.navigateBack()  
        }  
    })  
}  
</script>

如果在列表页面执行,dbRef.value?.refresh();可以刷新数据,但是,页面会闪烁,因为它会清空历史数据后,在获取新数据。所以也不得行。

这种列表页跳修改页面后,在返回列表页时,应该是onShow更新列表,无感刷新。不是这种清空后刷新。

2025-11-11 15:11 负责人:无 分享
已邀请:
DCloud_uniCloud_CRL

DCloud_uniCloud_CRL

修改数据成功后,通过事件告诉列表页,手动添加一条数据进去。

要回复问题请先登录注册