Vue3学习(组合式API——reactive()和ref()函数详解)

目录

一、reactive()函数。

(1)介绍与使用。

(2)简单案例演示。

二、ref()函数。

(1)介绍与使用。

(2)简单案例演示。

<1>ref()函数获取响应式对象的本质与底层。

<2>基于简单类型或对象类型数据ref()构建响应式对象演示。

三、reactive()与ref()函数小结。


一、reactive()函数。

(1)介绍与使用。
  • 官方解释:返回一个对象的响应式代理。

  • 基本作用:接收对象类型 数据的参数传入并返回一个响应式对象。之所以学这个函数是因为在Vue中默认的数据并不是响应式的。希望得到的是响应式的数据就需要通过函数reactive()或ref()进行处理。

  • 核心使用步骤:
  • 1、导入reactive()函数。
  • 2、执行reactive()函数并传入类型为对象的初始值,并使用变量接收返回值。
(2)简单案例演示。
  • 代码。
html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="app">
        <div>{{state}}</div>
        <div>-----------------------</div>
        <div>{{state.count}}</div><button @click="changeCount">count++</button>
    </div>
    <script type="module">
        import { createApp, reactive } from './vue.esm-browser.js'
        createApp({
            setup() {
                //reactive接收一个对象类型的数据,返回一个响应式的对象
                const state = reactive({
                    count: 100
                })
                const changeCount = () => {
                    state.count++
                }
                return {
                    state,
                    changeCount
                }

            }
        }).mount('#app')
    </script>
</body>

</html>

  • 效果。

  • reactive()必须接收对象类型的数据!
  • 如果接收简单类型数据又希望它是响应式,就需要使用函数ref()。

二、ref()函数。

(1)介绍与使用。
  • 官方解释:接受一个内部值,返回一个响应式的、可更改的 ref 对象。此对象只有一个指向其内部值的属性 .value。

  • 基本作用:接收简单类型 或对象类型 的数据传入,并返回一个响应式的对象。

  • 核心使用步骤:
  • 1、导入ref()函数。
  • 2、执行ref()函数并传入初始值(简单类型或对象类型),并使用变量接收ref()函数的返回值。
(2)简单案例演示。
<1>ref()函数获取响应式对象的本质与底层。
  • 本质:在原有传入数据的基础上,外层包了一层对象,包成复杂类型。
  • 底层:包成复杂类型之后,再借助reactive()函数实现了响应式!
  • 脚本中访问数据,需要通过.value。

  • 代码示例。
html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="app">
        <div>{{state}}</div> <!-- 插值表达式中不需要使用.value -->
    </div>
    <script type="module">
        import { createApp, ref } from './vue.esm-browser.js'
        createApp({
            setup() {
                //ref接收简单类型或对象类型的数据,返回一个响应式的对象
                //本质:在原有传入的数据基础上包了一层对象
                const state = ref(0)
                console.log(state)
                console.log(state.value)
                return {
                    state
                }
            }
        }).mount('#app')
    </script>
</body>

</html>

  • 效果。

<2>基于简单类型或对象类型数据ref()构建响应式对象演示。
  • 代码。
html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="app">
        <!-- 插值表达式中不需要使用.value -->
        <div>{{state}}</div><button @click="changeCount">count++</button>
        <div>-----------------------</div>
        <div>{{userInfo}}</div>
    </div>
    <script type="module">
        import { createApp, ref } from './vue.esm-browser.js'
        createApp({
            setup() {
                //ref接收简单类型或对象类型的数据,返回一个响应式的对象
                const userInfo = ref({
                    name: 'zs',
                    age: 18
                })
                //本质:在原有传入的数据基础上包了一层对象
                const state = ref(0)
                console.log(state)
                const changeCount = () => {
                    state.value++  //脚本中使用.value访问值
                    console.log(state.value)
                }
                return {
                    state,
                    userInfo,
                    changeCount
                }

            }
        }).mount('#app')
    </script>
</body>

</html>

  • 效果。

三、reactive()与ref()函数小结。

  1. reactive和ref函数的共同特点:使用函数调用的方式生成响应式数据!
  2. reactive不能处理简单类型的数据。
  3. ref参数类型支持更多,但脚本中必须通过.value访问修改。
  4. ref函数内部实现依赖于reactive函数。
  5. 推荐:声明数据统一使用ref(),更加灵活且统一。
相关推荐
Jmyd01234 小时前
Web端3D营销展厅技术实现路径:从素材上云到线索回流的数据链路
前端·3d·性能优化·三维数字化
半个落月5 小时前
LangChain Agent 中间件实战(上):生命周期、状态、短路与工具包
javascript·langchain
砚凝霜5 小时前
【软考信息安全】第二十二章 Web服务器安全分析与增强——Apache与IIS
服务器·前端·安全
2603_965148115 小时前
社区与学习资源:从入门到精通的API选品学习路径
数据库·人工智能·python·学习·数据挖掘
半个落月5 小时前
LangChain Agent 中间件实战(下):DeepAgents文件权限、长期记忆与对话摘要
javascript·langchain
u0111026757 小时前
JPG、PNG、WebP 怎么选?按透明度、体积和使用场景做判断
前端·javascript·vue.js·图像处理·ai作画
kaixin_啊啊7 小时前
【用于更准确 G×E 基因组预测的大规模作物数据集与基于深度学习的多模态融合框架】论文学习
人工智能·深度学习·学习
xier_ran7 小时前
【infra之路】AI 编译器学习笔记(六):重拾 C++——lambda 与 MLIR 中的回调
c++·笔记·学习
jerrywus7 小时前
让 AI 写完代码后交一份报告:我改造了 answer-me-with-html
前端·claude·cursor
派小心.8 小时前
小程序分享链路中来源参数的传递校验
大数据·前端·数据库·人工智能·小程序·数据分析