Vue3(Vue reactive)

时间:2023-10-02 08:20:22投稿:那位张同学啊
 

Vue3

reactive 参数必须是对象 (json / arr)如果给 reactive 传递了其它对象 默认情况下,修改对象无法实现界面的数据绑定更新。 如果需要更新,需要进行重新赋...,接下来具体说说Vuereactive

在 reactive 使用基本类型参数

基本类型(数字、字符串、布尔值)在 reactive 中无法被创建成 proxy 对象,也就无法实现监听。

<template><div> <p>{{msg}}</p> <button @click="c">button</button></div></template> <script>import { reactive } from 'vue'export default { name: 'App', setup() { let msg = reactive(0) function c() { console.log(msg); msg ++; } return { msg, c }; }}</script>

Vue3(Vuereactive)

点击 button ,我们期望的结果是数字从 0 变成 1,然而实际上界面上的数字并没有发生任何改变。

查看控制台,它的输出是这样的(我点了 3 次)

出现提示

value cannot be made reactive: 0

而输出的值确实发生了变化,只不过这种变化并没有反馈到界面上,也就是说并没有实现双向数据绑定。当然,如果是 ref 的话,就不存在这样的问题。而如果要使用 reactive ,我们需要将参数从 基本类型 **为 对象。

<template><div> <p>{{msg.num}}</p> <button @click="c">button</button></div></template> <script>import { reactive } from 'vue'export default { name: 'App', setup() { let msg = reactive({ num: 0 }) function c() { console.log(msg); msg.num ++; } return { msg, c }; }}</script>

将参数替换成了对象 {num: 0},此时,点击按钮界面就会产生改变(我点了 3 次)。

在控制台打印消息

可以看到,msg 成功被创建成了 proxy 对象,他通过劫持对象的 get 和 set 方法实现了对象的双向数据绑定。

深层的、对象内部的变化也能被察觉到(注意下面代码中的 inner )

<template><div> <p>{{msg.num.inner}}</p> <button @click="c">button</button></div></template> <script>import { reactive } from 'vue'export default { name: 'App', setup() { let msg = reactive({ num: { inner: 0 } }) function c() { console.log(msg); msg.num.inner ++; } return { msg, c }; }}</script>

数组变化也不在话下。

<template><div> <p>{{msg}}</p> <button @click="c">button</button></div></template> <script>import { reactive } from 'vue'export default { name: 'App', setup() { let msg = reactive([1, 2, 3]) function c() { console.log(msg); msg[0] += 1; msg[1] = 5; } return { msg, c }; }}</script>

在-reactive-使用-date-参数在 reactive 使用 Date 参数

如果参数不是数组、对象,而是稍微奇怪一点的数据类型,例如说 Date ,那么麻烦又来了。

<template><div> <p>{{msg}}</p> <button @click="c">button</button></div></template> <script>import { reactive } from 'vue'export default { name: 'App', setup() { let msg = reactive(new Date()) function c() { console.log(msg); msg.setDate(msg.getDate() + 1); console.log(msg); } return { msg, c }; }}</script>!

这里我先打印了 msg 两次,可以看到,点击一次 button ,msg 的数据是存在变化的,但界面并未发生变化,同时我们发现在控制台里,msg 并未被识别成 proxy。

就算我们把 Date 放在对象里,就像这样

<template><div> <p>{{msg.date}}</p> <button @click="c">button</button></div></template> <script>import { reactive } from 'vue'export default { name: 'App', setup() { let msg = reactive({ date: new Date() }); function c() { console.log(msg); msg.date.setDate(msg.date.getDate() + 1); console.log(msg); } return { msg, c }; }}</script>

也仍然不起效果。

显然,对于这种数据类型,我们需要做特殊处理。

这个特殊处理就是重新赋值(,而不是直接修改原来的值)。

<template><div> <p>{{msg.date}}</p> <button @click="c">button</button></div></template> <script>import { reactive } from 'vue'export default { name: 'App', setup() { let msg = reactive({ date: new Date() }); function c() { console.log(msg); msg.date.setDate((msg.date.getDate() + 1)); msg.date = new Date(msg.date); console.log(msg); } return { msg, c }; }}</script>

这里我采用了拷贝的方案重新赋值了 msg.date,界面成功发生了变化(日期 + 1)。

以上就是Vue3(Vuereactive)的详细内容,希望通过阅读小编的文章之后能够有所收获!更多请关注倾诉星球其它相关文章!

如若转载,请注明出处:https://www.qsxq.cn/sbzt/bVUeffnf.html

相关推荐

  • 有个外国电影叫什么幸福?经典英国电影中的幸福主题

    有个外国电影叫什么幸福?经典英国电影中的幸福主题

    浏览:19002023-10-02

    在许多英国电影中,幸福主题常常是一个重要的元素,尽管幸福的定义可能因人而异。让我们深入探讨英国电影中幸福的不同呈现方式以及它们背后的意义。 幸福的多重定义

  • f1为什么没有女车手?

    f1为什么没有女车手?

    浏览:20562023-10-02

    以下将从生理差异、技术和策略、社会文化以及缺乏榜样和支持四个方面进行分析。生理差异是其中一个重要原因。男性在体力和耐力方面通常比女性更具优势,这使得他们

  • 学生会活动策划方案(表彰届学生会成员)

    学生会活动策划方案(表彰届学生会成员)

    浏览:18892023-10-02

    ②英雄救美道具:钥匙十把,链锁五条,椅子五张要求:每组一个男生,五个女生规则:五位女生坐在椅子上,并用链锁锁住,在起点处男生有十把钥匙,每次只能拿一把去救女生,而且救女生

  • 逾期原因分析(逾期科普)

    逾期原因分析(逾期科普)

    浏览:18412023-10-02

    然而,随着经济压力的增加和个人理财能力的不足,一些借款人开始出现逾期还款的情况。本文将探讨京东金条逾期5万的背景、原因和可能的解决方案。

  • 红领巾奖章个人优秀事迹(每一如既往的以红领巾奖章的标准来要求自己)

    红领巾奖章个人优秀事迹(每一如既往的以红领巾奖章的标准来要求自己)

    浏览:17702023-10-02

    在向阳小学生活的五年中,我总是以灿烂的笑脸对待身边的每一个人,用友好的态度帮助每一位同学,用真挚的情感尊敬每一位老师,正因为这样我得到了老师们的认可和同学们的

  • 开放大学未能保护教师免受骚扰

    开放大学未能保护教师免受骚扰

    浏览:7982023-10-02

    在向报纸发表了多封公开信后,犯罪学教授乔·菲尼克斯被比作一个观点“有问题、可怕”的“种族主义大叔”。 然而,一项裁决发现,开放大学未能保护她免受同事和跨性别