vue3 使用UI框架reactive数据更新,视图不更新问题

这篇具有很好参考价值的文章主要介绍了vue3 使用UI框架reactive数据更新,视图不更新问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本篇主要记录两个问题,然而这两个问题又都可以对应同一种解法。废话少说,解决方法在最上面。推荐格式如下:

const form = reactive({
    formData: {//为了保证响应性,一定一定要多包这一层
      key1: value,
      key2: value,
    },
  });
//或 个人比较喜欢第一种,大家各自取用吧
const form = ref({
   key1: value,
   key2: value,
});

一定一定要再多包一层,不然就会遇到一些问题。(⊙﹏⊙)虽然这是一句废话。下面的内容过于基础且本篇只记录bug和解法,想要探求为什么的呢,还请自己去查API。不愿浪费时间的,看到这里就结束了。

做项目一般都用个UI框架,我这次用的是字节的Arco Design,vue是3.2版本的。我一开始写了个表单,数据是这样式定义的

<template>
    <a-input v-model="obj.k1" placeholder="请填写测试" />
    <input v-model="obj.k2" placeholder="请填写测试值" />
</template>
<script setup>
    //表单数据
    let obj = reactive({ k1: undefined, k2: undefined });
    //本地记录或后台获取的表单数据
    const text = { k1: '测试', k2: 'abcd' };
    /*
     * 第一次解决视图不更新
     * const text = reactive({ k1: '测试', k2: 'abcd' });
    */
    //获取到表单数据后赋值给表单
    obj = text;
</script>

然后,第一次出现数据编辑,视图不更新。

这个我想那就强制刷新下视图吧,然后我就"$forceUpdate()",然后就出乎意料的失败了,那我再想想吧,后来我尝试这在获取的数据前加了个reactive,然后我就沿着错误的道路,继续往下走,直到遇到了第二个bug。

再说第二个bug前,插句话,此时原生的input还可以视图响应数据。因此,我标题加上了UI框架。

第二个视图不更新是在清空表单的时候遇到的。就是一旦给定初始值,我在清空表单时将对象置空,就又不好使了。

这次我的解决方法更直接了。直接点属性赋值。

<template>
    <a-input v-model="obj.k1" placeholder="请填写测试" />
    <input v-model="obj.k2" placeholder="请填写测试值" />
    <a-button type="primary" status="danger" @click="a">清空数据</a-button>
</template>
<script setup>
    //表单数据
    let obj = reactive({ k1: undefined, k2: undefined });
    //本地记录或后台获取的表单数据
     const text = reactive({ k1: '测试', k2: 'abcd' });
    //获取到表单数据后赋值给表单
    obj = text;
    //清空表单
    const a = () => {
        /*
        * 好使
        * 如果对象key值较多可以遍历对象,如采用for..in等循环
        */
        obj.k1 = undefined;
        obj.k2 = undefined;
        //不好使
        obj = {};
        //不好使
        obj = reactive({});
        //不好使
        obj = reactive({ k1: undefined, k2: undefined });
  };
</script>

虽然表单这样也算完成了。但是都写成这样了,还不知道自己写的有问题,那才有鬼了。

于是,我就又写了一遍。

<template>
    <a-input v-model="obj2.val.k1" placeholder="请填写测试" />
    <input v-model="obj2.val.k2" placeholder="请填写测试值" />
    <a-button type="primary" status="danger" @click="a">清空数据</a-button>
</template>
<script setup>
    const obj2 = reactive({
        val: {
            k1: undefined,
            k2: undefined,
        },
    });
    const text2 = { k1: '测试', k2: 'abcd' };
    obj2.val = text2;
    const a = () => {
        obj2.val = {};
    };
</script>

<template>
    <a-input v-model="obj2.k1" placeholder="请填写测试" />
    <input v-model="obj2.k2" placeholder="请填写测试值" />
    <a-button type="primary" status="danger" @click="a">清空数据</a-button>
</template>
<script setup>
  const obj2 = ref({
    k1: undefined,
    k2: undefined,
  });
  const text2 = { k1: '测试', k2: 'abcd' };
  obj2.value = text2;
  const a = () => {
    obj2.value = {};
  };
</script>

嗯嗯,很快就完成了。文章来源地址https://www.toymoban.com/news/detail-526722.html

到了这里,关于vue3 使用UI框架reactive数据更新,视图不更新问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • vue3 ref reactive响应式数据 赋值的问题

    vue3 ref reactive响应式数据 赋值的问题

    doing 遇见就记录,最后更新时间23.8.30 错误示范:直接赋值 以数组为例,对象也是一样的操作。 ref 定义的属性等价于 reactive({value:xxx}) ,所以 reactive、ref 直接重新赋值丢失响应是因为引用地址变了 正确写法 方法1: ref.value ,代码中更为清晰地表明响应式数据 方法2:包一层

    2024年02月10日
    浏览(16)
  • 解决在vue3中使用reactive响应式,赋值后造成页面不改变的问题?

    解决在vue3中使用reactive响应式,赋值后造成页面不改变的问题?

    我们需要在vue3中使用服务器的数据渲染到页面上,我使用的是reactive生成的响应式数据属性,但是在挂载后请求的数据并没有渲染显示到页面上。 技术: vue3 、 element-ui-plus home.vue 我们通过直接赋值,可以看出数据变为普通的数据了,并不是响应式的。 代码如下: 可以看出

    2023年04月26日
    浏览(6)
  • 解决Vue数组数据变化了,赋值后视图没更新的问题

    解决Vue数组数据变化了,赋值后视图没更新的问题

    最近遇到一个问题,表格数据变化了,直接赋值后视图没更新,打印表格数据发现是最新的数据,这主要是因为,Vue.js 不能检测到对象属性的添加或删除。因为 Vue.js 在初始化实例时将属性转为 getter/setter,所以属性必须在 data 对象上才能让 Vue.js 转换它,才能让它是响应的。

    2024年02月02日
    浏览(6)
  • Vue3 reactive丢失响应式问题

    Vue3 reactive丢失响应式问题

    问题描述: 使用 reactive 定义的对象,重新赋值后失去了响应式,改变值视图不会发生变化。 测试代码: 输出结果:   从上述测试代码中,ref 定义的对象有响应式,而 reactive 定义的对象失去了响应式,这是什么原因呢?官网中写到: 如果将一个对象赋值给 ref ,那么这个对

    2024年02月05日
    浏览(8)
  • Vue3中reactive响应式失效的问题

    弹窗内部有一个挑选框,要通过请求接口获取挑选框下面可供选择的数据。 这是一个很简单的情境,我立刻有了自己的思路。如果实现搜索,数据较少可以直接用elementplus自带的filter。如果数据较多,就需要传val,在后台进行搜索,然后分页渲染。我选择的是前者,所以只需

    2024年02月10日
    浏览(10)
  • 避大坑!Vue3中reactive丢失响应式的问题

    在vue3中,我们定义响应式数据无非是ref和reactive。 但是有的小伙伴会踩雷!导致定义的响应式丢失的问题。 大错特错!!! 大错特错!!! 1.ref 定义数据(包括对象)时,都会变成 RefImpl(Ref 引用对象) 类的实例,无论是修改还是重新赋值都会调用 setter,都会经过 reactive 方法

    2023年04月16日
    浏览(9)
  • Vue3 - 如何将 reactive() 创建的响应式数据 “轻松“ 恢复成初始数据值,重置 reactive() 定义的数据使其恢复成初始定义的数据结构(使用一个函数轻松解决,并且不丢失响应式)

    Vue3 - 如何将 reactive() 创建的响应式数据 “轻松“ 恢复成初始数据值,重置 reactive() 定义的数据使其恢复成初始定义的数据结构(使用一个函数轻松解决,并且不丢失响应式)

    典型的场景就是我有一个表单,用户输入了一些内容后,点击提交后程序需要 “重置表单” 把上次填过的内容重置掉。 本文实现了 一个函数重置 reactive 创建的数据,恢复 “最开始时的数据结构和默认值,” 你可以直接复制本文提供的函数,有三种方案可选。 直接调用函

    2024年02月11日
    浏览(9)
  • vue3使用ref和reactive

    vue3使用ref和reactive

    目录 ​​​​​​​ vue3使用ref和reactive的方法 1.ref 2.reactive Vue 3 使用 ref 和 reactive 创建响应式对象的完整示例: 1.示例 2.示例说明 vue3使用ref和reactive的方法 Vue 3引入了两个新的API, ref 和 reactive ,用于创建响应式对象。这两个方法都位于 Vue.prototype 上,因此可以在组件实例

    2024年02月08日
    浏览(8)
  • Vue3 中应该使用 Ref 还是 Reactive?

    你可能会好奇:为什么我们需要使用带有  .value  的 ref,而不是普通的变量?为了解释这一点,我们需要简单地讨论一下 Vue 的响应式系统是如何工作的。 当你在模板中使用了一个 ref,然后改变了这个 ref 的值时,Vue 会自动检测到这个变化,并且相应地更新 DOM。这是通过一

    2024年02月20日
    浏览(9)
  • 【vue3】优雅的解决reactive()响应式对象初始化重新赋值问题v2

    关联的上篇文章: 【vue3】优雅的解决reactive()响应式对象初始化重新赋值问题_vue3 reactive重新赋值_oumae-kumiko的博客-CSDN博客 在上面该文章提到了reactive该api的不方便之处和相关重置数据方法的解析。下面提供的方法就是自己封装的`$reactive`方法,通过该方法返回响应式数据和重

    2024年02月15日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包