Vue3中使用reactive时,后端有返回数据但dom没有更新的解决

 更新时间:2023年03月28日 09:06:20   作者:liguoyuan819  
这篇文章主要介绍了Vue3中使用reactive时,后端有返回数据但dom没有更新的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

使用reactive时,后端有返回数据但dom没有更新

问题

在Vue3的setup中使用reactive更新数据,但是dom没有更新问题

代码:

<template>
    <div class="aside">
        <div class="collpase-btn" @click="collpaseMenu">
            <el-icon><fold /></el-icon>
        </div>
        <el-menu
            active-text-color="#ffd04b"
            background-color="#545c64"
            class="el-menu-vertical-demo"
            default-active="2"
            text-color="#fff"
            :collapse="store.state.isCollapse"
            @open="handleOpen"
            @close="handleClose"
        >
            <el-sub-menu :index="item.id" v-for="item in menus" :key="item.id">
                <template #title>
                    <el-icon><grid /></el-icon>
                    <span>{{item.title}}</span>
                </template>
                <el-menu-item :index="it.id" v-for="it in item.subMenuList">{{it.title}}</el-menu-item>
            </el-sub-menu>
 
        </el-menu>
    </div>
</template>
<script lang="ts">
import axios from 'axios';
import { defineComponent, onMounted, reactive } from 'vue'
import { useStore } from 'vuex';
 
export default defineComponent({
    name:'Aside',
    setup() {
        const store = useStore();
        const mensList:any = [];
        let menus = reactive(mensList);
        
        const handleOpen = (key: string, keyPath: string[]) => {
 
        }
        const handleClose = (key: string, keyPath: string[]) => {
            
        };
        const collpaseMenu = () => {
            store.dispatch('collpaseChange');
        };
        onMounted(() => {
            axios.get('/user/menu').then(res => {
            menus.mensList = res.data.menusList;
        });
        });
        return {
            handleOpen,
            handleClose,
            collpaseMenu,
            store,
            menus
        }
    },
})
</script>
 
<style lang="scss" scoped>
.el-menu-item.is-active{
    background-color: var(--el-menu-hover-bg-color);;
}
.collpase-btn{
   text-align: center;
    width: 100%;
    padding: 10px 0px;
    cursor: pointer;
    .el-icon{
        color: white;
        font-size: 24px;
    }
}
</style>

直接使用reactive()一个空数组,改变当前值时,页面不会自动刷新。

解决办法

使用reactive时,将参数变为一个对象形式,而不是单纯的数组。

当改为传入对象包裹后,页面正常显示:

关于vue3中reactive的意义

在学习Vue3的时候产生疑问:

const addForm = reactive({ // 这里面的reactive啥意思
  sysPre: null,
  diaPre: null,
  tem: null
})

查询解决

在Vue3中,响应式对象是指通过reactive函数转换而来的对象,它的属性可以被Vue自动监测,当属性值发生变化时,Vue会自动更新相关的视图。这个过程是通过Vue内部实现的响应式系统来完成的。

响应式对象的意义在于使得开发者可以更加方便地管理和操作数据。当数据被转换为响应式对象后,我们可以直接修改对象的属性值,而不需要手动调用Vue的更新函数来更新视图。这样可以极大地提高开发效率,让开发者更加专注于业务逻辑的实现。

此外,响应式对象还可以与Vue的模板语法、组件等功能无缝衔接,使得我们可以通过组合使用响应式对象和Vue的其他功能,快速开发出高效、可维护的应用程序。

在这段代码中,addForm对象被使用reactive函数转换为一个响应式对象。这意味着当addForm对象的属性sysPre,diaPre或tem发生变化时,相关的依赖将会自动更新,如绑定在模板中的表单输入框等。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue项目中向数组添加元素的3种方式

    vue项目中向数组添加元素的3种方式

    这篇文章主要给大家介绍了关于vue项目中向数组添加元素的3种方式,在Vue中添加元素到数组非常简单,文中通过代码介绍的非常详细,对大家学习或者使用vue具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-10-10
  • 一文教你如何优雅的控制全局loading的显示

    一文教你如何优雅的控制全局loading的显示

    在我们的平时的工作中,在前后端交互的时候,为了提高页面的观赏性和用户的体验,我们会在页面上添加loading来阻止用户操作来等待接口的返回,这篇文章主要给大家介绍了关于如何优雅的控制全局loading显示的相关资料,需要的朋友可以参考下
    2022-01-01
  • vuex页面刷新导致数据丢失的解决方案

    vuex页面刷新导致数据丢失的解决方案

    这篇文章主要介绍了vuex页面刷新导致数据丢失的解决方案,帮助大家更好的使用vue框架,感兴趣的朋友可以了解下
    2020-12-12
  • vue本地打开build后生成的dist文件夹index.html问题

    vue本地打开build后生成的dist文件夹index.html问题

    这篇文章主要介绍了vue本地打开build后生成的dist文件夹index.html问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2019-09-09
  • vue实现二级导航栏效果

    vue实现二级导航栏效果

    这篇文章主要为大家详细介绍了vue实现二级导航栏效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • Vue3+Elementplus实现面包屑功能

    Vue3+Elementplus实现面包屑功能

    这篇文章主要为大家详细介绍了Vue3如何结合Elementplus实现面包屑功能,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以参考下
    2023-11-11
  • Vue组件通信中非父子组件传值知识点总结

    Vue组件通信中非父子组件传值知识点总结

    在本篇文章里小编给大家整理的是关于Vue组件通信中非父子组件传值知识点总结,有兴趣的朋友们学习下。
    2019-12-12
  • Vue EventBus自定义组件事件传递

    Vue EventBus自定义组件事件传递

    这篇文章主要介绍了Vue EventBus自定义组件事件传递,组件化应用构建是Vue的特点之一,本文主要介绍EventBus进行数据消息传递 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Vue的自定义组件不能使用click方法的解决

    Vue的自定义组件不能使用click方法的解决

    这篇文章主要介绍了Vue的自定义组件不能使用click方法的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • 详解解决使用axios发送json后台接收不到的问题

    详解解决使用axios发送json后台接收不到的问题

    这篇文章主要介绍了详解解决使用axios发送json后台接收不到的问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06

最新评论