玩转Vue3之Composables
前言
Composables 称之为可组合项,熟悉 react 的同学喜欢称之为 hooks ,由于可组合项的存在,Vue3 中的组件之间共享状态比以往任何时候都更容易。这种新范例引入了一种更有组织性和可扩展性的方式来管理整个应用程序的状态和逻辑。
什么是Composables
本质上,可组合项是一种模式而不是特定的功能。它是通过一个简单的函数来实现的,该函数可以保存状态和可重用的代码。总的来说:可组合项是可重用的有状态函数。它们可用于在组件之间共享响应式状态和逻辑。
如何定义
下面通过一段代码看看什么是可组合项:
import { ref } from 'vue';
// 定义可组合项最好需要以use开头 比如 useXXX
export function useCounter(initialValue = 0) {
// 可组合项都有自己的生命周期 你完全可以使用Composition API
const counter = ref(initialValue);
function increment() {
counter.value++;
}
function decrement() {
counter.value--;
}
function reset() {
counter.value = initialValue;
}
// 返回其他组件需要访问的所有内容。
return { counter, increment, decrement, reset };
}
我们将 counter 声明为响应式状态以及三个操作它的函数,请注意,可组合项必须返回其他组件可以访问的所有内容。
如何使用
从组件方面,我们可以像这样导入和初始化可组合项:
<template>
<div>
<h3>Counter Value: {{ counter }}</h3>
<button @click="increment">Increment</button>
<button @click="decrement">Decrement</button>
<button @click="reset">Reset</button>
</div>
</template>
<script setup>
import { useCounter } from './useCounter';
const { counter, increment, decrement, reset } = useCounter();
</script>
尝试一下
试试这个例子
此示例展示了可组合项如何让我们的组件非常轻量且易于理解。每次使用可组合项时,都会创建一个新的计数器变量,以保持实例之间的状态分离。
使用可组合项进行共享状态
在某些情况下,需要实例之间共享状态,我们知道 Vue3 中组件通信方式有很多种比如 props,emits,provide甚至一些状态管理库比如 pinia。其实可组合项也可以达到同样的目的,可以通过在可组合函数外部声明状态来实现:
import { ref } from 'vue';
// 外部进行声明状态
const sharedState = ref();
export function useComposable() {
// 内部声明状态每次都会初始化
const localState = ref();
return { sharedState, localState };
}
这种方法展示了可组合性的灵活性,让我们能够以对每个实例单独或在它们之间共享的方式管理状态。
总结
总而言之,可组合性通过提供自然且易于理解的简单性和模块化性,真正重新定义了 Vue3。它们可用于从组件中抽象出复杂性,还可在组件之间共享状态。强烈推荐大家运用起来。
玩转Vue3之Composables的更多相关文章
- 纯小白入手 vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造
vue3.0 CLI 真小白一步一步入手全教程系列:https://www.cnblogs.com/ndos/category/1295752.html 我的 github 地址 - vue3.0St ...
- Vue3实战系列:结合 Ant-Design-of-Vue 实践 Composition API
Vue 3 出来之后,很多人有如下想法,"又要学新东西啦"."我学不动了"等等. 但是事物总有它的两面性,前端知识更新的很快,利好勤奋好学的同学.计算机行业的迭 ...
- Vue2和Vue3技术整理1 - 入门篇 - 更新完毕
Vue2 0.前言 首先说明:要直接上手简单得很,看官网熟悉大概有哪些东西.怎么用的,然后简单练一下就可以做出程序来了,最多两天,无论Vue2还是Vue3,就都完全可以了,Vue3就是比Vue2多了一 ...
- Vue2和Vue3技术整理3 - 高级篇
3.高级篇 前言 基础篇链接:https://www.cnblogs.com/xiegongzi/p/15782921.html 组件化开发篇链接:https://www.cnblogs.com/xi ...
- Vite2+Vue3+ts的eslint设置踩坑
目录 新项目了 Vite搭建 eslint 先安装eslint 创建.eslintrc.js 引入规则 Airbnb 配合prettier 对ts的支持 .eslintrc.js 在页面上查看esli ...
- 使用Vite2+TypeScript4+Vue3技术栈,如何入手开发项目
前言 今天,我们使用Vite2.0+Vue3+TS来试玩一下,开发一个demo项目.实战 我们,打开Vite官方网站(https://cn.vitejs.dev/). Vite (法语意为 " ...
- vite vue3 规范化与Git Hooks
在 <JS 模块化>系列开篇中,曾提到前端技术的发展不断融入很多后端思想,形成前端的"四个现代化":工程化.模块化.规范化.流程化.在该系列文章中已详细介绍了模块化的发 ...
- 学习 vue3 第一天 vue3简介,创建vue3项目 Composition Api 初识
前言: 从今天开始来和大家一起学习 vue3 相信大家都不陌生,已经火了一段时间了,但是还是有不少人没有学习,那就跟着六扇老师来简单的入个门 废话不多说,来开始今天的学习 Vue3 简介: 2020年 ...
- vue3 setup语法糖下,vue自定义指令的实现,以及指令全局挂载,自定义v-loading的实现
最近一段时间,在做h5的移动端项目,UI组件库使用的vant,vant组件中的loading实在难用,无法包裹某个块进行loading,也无法对非组件的标签进行loading,所以想着自定义写个指令, ...
- 一个 OpenTiny,Vue2 Vue3 都支持!
大家好,我是 Kagol,OpenTiny 开源社区运营,TinyVue 跨端.跨框架组件库核心贡献者,专注于前端组件库建设和开源社区运营. 今天给大家介绍如何同时在 Vue2 和 Vue3 项目中使 ...
随机推荐
- Unity的asm笔记
使用asm的好处 减少修改C#后unity编译dll的时间,对于项目中的C#代码越多效果越明显,比如我们的一个3dmmo项目是纯C#开发,每次修改C#后编译时间就要26s以上 在Unity2018.2 ...
- TienChin 验证码响应结果分析&验证码生成接口分析
验证码响应结果分析 首先从前端开始进行分析,进入到登录页面,打开开发者工具(f12),找到 network,f5 刷新一下页面,然后,筛选一下,筛选内容为 Fetch/XHR: 你会发现列表中有两项内 ...
- 总结一个问题:csdn发布文章页面为空或者创作内容管理为空
总结一个问题:csdn发布文章页面或者创作内容管理为空 解决方案: 打开chrome浏览器的设置: 点击清除数据: 选择高级里清除数据,一般24小时就可以了,不行就7天
- requests模块的高级应用
requests抓取数据报错 - HttpConnectinPool: - 原因: - 1.短时间内发起了高频的请求导致ip被禁 - 2.http连接池中的连接资源被耗尽 - 解决: - 1.代理 - ...
- 小知识:enable_ddl_logging参数的设置和日志位置变化
业务部门需求,要协助客户DBA查truncate操作历史执行情况. 首先确认数据库已开启enable_ddl_logging, 然后从alert中查找没有记录: 之前11g版本都是记录到alert日志 ...
- 《ASP.NET Core 微服务实战》-- 读书笔记(第4章)
第 4 章 后端服务 现实中的服务不可能处于真空之中,大多数服务都需要与其他服务通信才能完成功能. 我们将这些支持性服务称为后端服务,接下来我们将通过创建一个新的服务并修改之前的团队服务与这个服务通信 ...
- clickhouse-备份表结构
clickhouse导出表结构 #!/bin/bash OUTDIR=/root/backup/ clickhouse-client -q "SHOW DATABASES" > ...
- JS leetcode 加一 题解分析
壹 ❀ 引 今天是刷leetcode的第三天,根据推荐优先刷数据结构相关的卡片,先把数据结构知识体系建立起来,不然就是题目无从下手答案也看不懂的尴尬局面.那么今天的题目是加一,老规矩,先记录自己的解题 ...
- axios.delete传参,400错误
我在使用axios.delete进行传参的时候,发现会报400错误 后端代码(C#) 前端代码 这样的参数请求会报400错误 后端就一个参数,前端发一个id为什么接受不到呢? 在网上找了半天,终于明白 ...
- NC51222 Strategic game
题目链接 题目 题目描述 Bob enjoys playing computer games, especially strategic games, but sometimes he cannot ...