当前位置: 首页 > news >正文

vue3:直接修改reative的值,页面却不响应,这是什么情况?

目录

前言

错误示范:

解决办法:

1.使用ref

2.reative多套一层

3.使用Object.assign


前言:

        今天看到有人在提问,问题是这样的,我修改了reative的值,数据居然失去了响应性,页面毫无变化,这是什么情况?本着好奇心害死猫的原则,我就看了下,我直呼好家伙!

错误示范:

请看以下代码,大概是这个样子的:

<template><view><view class="">{{ user }}</view><button @click="setUser">修改user</button></view>
</template><script setup>import {reactive} from 'vue';let user = reactive({name: 'jay'});const setUser = () => {user = {name: 'qianjue',age: 20}};
</script>

此时我无论如何点击改变user按钮,页面岿然不动 

 本着严谨的原则,我们在setUser内打印下user的值,观察观察

	const setUser = () => {console.log(user);user = {name: 'qianjue',age: 20}};

 红色框是我们第一次点击按钮的打印值,绿色框是我们之后点击的打印值,我们都很清楚这两个值所代表的意义,当我们第一次点击之后,我们的user对象变成了一个普通的对象,并不是由proxy的代理对象,所以根本不具有响应性。

这个时候,就会有人想点子了,不是说我是个普通对象,不是代理的吗?我给他重新赋值一个reative,这不就完美解决?

	const setUser = () => {console.log(user);user = reactive({name: 'qianjue',age: 20})};

然后点击按钮发现,页面还是毫无变化,user的打印值如下,嗯?感觉没毛病啊,莫非是vue3的bug?

 原因:Vue 的响应式系统是通过属性访问进行追踪的,因此我们必须始终保持对该响应式对象的相同引用。这意味着我们不可以随意地“替换”一个响应式对象,因为这将导致对初始引用的响应性连接丢失

这可不是我说的,是vue官网说的---- vue响应式文档

解决办法:

1.使用ref

	let user = ref({name: 'jay'});const setUser = () => {console.log(user.value);user.value = {name: 'qianjue',age: 20}};

2.reative多套一层

<template><view><view class="">{{ state.user }}</view><button @click="setUser">修改user</button></view>
</template><script setup>import {reactive} from 'vue';const state = reactive({user: {name: 'jay'}})const setUser = () => {console.log(state.user);state.user = {name: 'qianjue',age: 20}};
</script>

3.使用Object.assign

	const user = reactive({name: 'jay'})const setUser = () => {console.log(user);Object.assign(user, {name: 'qianjue',age: 20})};

小声bb:我从未使用过此方法。。。

http://www.lryc.cn/news/7579.html

相关文章:

  • 从Vue2 到 Vue3,这些路由差异你需要掌握!
  • Maxwell简介、部署、原理和使用介绍
  • 20230215_数据库过程_渠道业务清算过程
  • webpack(高级)--性能优化-代码分离
  • 借助docker, 使用verdaccio搭建npm私服
  • c/c++开发,无可避免的模板编程实践(篇二)
  • 【2023】【standard-products项目】中查找的问题与解决方案 (未完待续)
  • 力扣sql简单篇练习(十六)
  • 青少年蓝桥杯python组(STEMA中级组)
  • JVM内存结构,Java内存模型,Java对象模型
  • 跨境电商新形式下,如何选择市场?
  • MySQL的触发器
  • 内存映射模块读写文件提高IO性能mmap
  • 存储硬件与协议
  • 智能物流半导体发展
  • SAP S/4HANA 概述
  • 太上感应篇
  • FPGA入门系列17--task
  • React学习笔记(番外二)——列表多选批量处理复合组件
  • Pom.xml详解
  • 浅谈软件测试需求管理
  • 面试题复盘
  • Telerik UI for WPF 2023 R1
  • 基于 CentOS7 的 KVM 部署 + 虚拟机创建
  • Python自动化测试实战篇(5)优化selenium+unittest+ddt,搞定100条测试用例只执行前50条
  • C语言--数据的存储2
  • Ubuntu 安装 Qt5.7.0
  • “世界”的伊利,“三难”的潘刚
  • 【新】华为OD机试 - 开心消消乐(Python)
  • 山东大学2022-2023数据仓库挖掘期末考题回忆