Vue3 to全家桶

本文介绍了Vue中用于处理响应式数据的三个关键函数:toRef、toRefs和toRaw。toRef用于将响应式对象的某个属性转换为响应式,适用于作为函数参数;toRefs则是将整个对象转换为响应式属性的对象,方便解构;toRaw则用于获取原始非响应式对象。理解这些工具的用法对于优化Vue应用的性能和数据管理至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

to全家桶

1、toRef:将原始数据对象上的某个属性变为响应式的。

使用场景:将reactive对象中的某个属性提取出来作为函数的形参。

如果原始数据对象是非响应式的,就不会更新视图,数据会变;

import { toRef } from 'vue';
const obj = {
    num1: 1,
    num2: 2,
};
const state = toRef(obj, 'num1');
// 数据改变了但是页面不会改变

如果原始数据对象是响应式的,视图和数据均发生改变。

import { reactive, toRef } from 'vue';
const obj = reactive({
    num1: 1,
    num2: 2,
});
const state = toRef(obj, 'num1');
// 数据和页面均改变

2、toRefs:将原始数据对象上的所有属性变为响应式的。

手写toRefs:

import { toRef } from 'vue';
const toRefs = <T extends object>(object: T) => {
    const map: any = {};
    for (let key in object) {
        map[key] = toRef(object, key);
    }
    return map;
};

使用场景:解构reactive对象,解构赋值(诗句任然是响应式的)

注意:直接结构reactive对象,数据将失去响应式

3、toRaw:接收一个响应式对象作为参数,将响应式对象转化为普通对象。

### 使用 Vue 全家的完整示例 以下是基于 Vue.js 及其相关工具(Vue Router、Vuex 和 Axios)的一个简单示例项目源码。此示例展示了如何集成这些工具并实现一个基本的功能模块。 #### 项目结构 ```plaintext src/ ├── main.js // 应用入口文件 ├── App.vue // 主组件 ├── components/ // 组件目录 │ └── HelloWorld.vue ├── views/ // 页面视图目录 │ ├── Home.vue │ └── About.vue ├── router/ // 路由配置 │ └── index.js ├── store/ // Vuex 状态管理 │ └── index.js └── api/ // API 请求封装 └── axios.js ``` --- #### `main.js` 文件 这是项目的入口文件,用于初始化 Vue 实例以及加载 Vue Router 和 Vuex。 ```javascript import { createApp } from &#39;vue&#39;; import App from &#39;./App.vue&#39;; import router from &#39;./router&#39;; // 加载路由 import store from &#39;./store&#39;; // 加载状态管理 const app = createApp(App); app.use(router); // 注册路由 app.use(store); // 注册状态管理 app.mount(&#39;#app&#39;); // 挂载到 DOM 中 ``` --- #### `App.vue` 文件 这是一个简单的布局模板,展示导航栏和动态页面内容。 ```html <template> <div id="app"> <nav> <router-link to="/">Home</router-link> | <router-link to="/about">About</router-link> </nav> <hr /> <!-- 动态渲染当前路由对应的组件 --> <router-view /> </div> </template> <script> export default { name: "App", }; </script> ``` --- #### `views/Home.vue` 文件 首页组件,显示一些欢迎信息。 ```html <template> <div class="home"> <h1>Welcome to the Home Page!</h1> <p>{{ message }}</p> </div> </template> <script> export default { data() { return { message: "This is a simple home page.", }; }, }; </script> ``` --- #### `views/About.vue` 文件 关于页组件,调用 Vuex 获取数据。 ```html <template> <div class="about"> <h1>About Us</h1> <p>Data fetched via Vuex: {{ userData.name }} ({{ userData.age }} years old)</p> </div> </template> <script> export default { computed: { userData() { return this.$store.state.user; // 访问 Vuex 数据 }, }, }; </script> ``` --- #### `router/index.js` 文件 配置 Vue Router 的路径映射关系。 ```javascript import { createRouter, createWebHistory } from &#39;vue-router&#39;; // 导入页面组件 import Home from &#39;../views/Home.vue&#39;; import About from &#39;../views/About.vue&#39;; const routes = [ { path: &#39;/&#39;, component: Home }, // 默认主页 { path: &#39;/about&#39;, component: About }, // 关于页 ]; const router = createRouter({ history: createWebHistory(), routes, }); export default router; ``` --- #### `store/index.js` 文件 设置 Vuex 来集中管理应用的状态。 ```javascript import { createStore } from &#39;vuex&#39;; const state = { user: { name: "John Doe", // 用户名 age: 30, // 年龄 }, }; const mutations = {}; // 不需要额外操作时为空对象 const actions = {}; // 同样无需复杂逻辑 export default createStore({ state, mutations, actions }); ``` --- #### `api/axios.js` 文件 封装 HTTP 请求方法,便于统一管理和错误处理。 ```javascript import axios from &#39;axios&#39;; const instance = axios.create({ baseURL: &#39;https://jsonplaceholder.typicode.com/&#39;, // 示例接口地址 timeout: 5000, // 设置请求超时时间 }); instance.interceptors.request.use( config => { console.log(&#39;Request:&#39;, config); return config; }, error => Promise.reject(error), ); instance.interceptors.response.use( response => response.data, error => Promise.reject(error), ); export default instance; ``` --- ### 总结 通过以上代码片段可以看出,Vue 全家能够很好地协同工作以满足现代前端开发需求[^1]。Vue CLI 提供了一套完整的脚手架工具链,使得开发者可以轻松搭建复杂的单页应用程序(SPA)[^4]。此外,Vue 的灵活性允许用户根据实际业务场景自由组合所需功能模块[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hoki802

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值