vue3自定义Hooks
比较简单的小demo,直接上代码吧
ts使用defineComponent,setup()里面使用 Composition API 写法,逻辑块清晰,不用前后文查找,拒绝 spaghetti code
<script lang="ts">
import { defineComponent, reactive, ref } from 'vue';
// import HelloWorld from '@/components/HelloWorld.vue'; // @ is an alias to /src
import { CountRange, useCount } from '@/composition/use-count'; export default defineComponent({
name: 'Home',
// components: {
// HelloWorld,
// },
props: {
title2: String
},
data() {
return {
title1: 'this is title1'
};
},
setup() {
const title2 = ref('this is title2'); const range: CountRange = reactive({
min: 5,
max: 50
}); const { current, minus, plus, set, reset } = useCount(10, range); return {
title2,
range,
current,
minus,
plus,
set,
reset,
};
}
});
</script>
useCount
import { ref, Ref, watch } from "vue"; export interface CountRange {
min: number;
max: number;
} interface Result {
current: Ref<number>;
minus: (num: number) => void;
plus: (num: number) => void;
set: (num: number) => void;
reset: () => void;
} export function useCount(init: number, range: CountRange): Result {
const current = ref(init); const minus = (num: number) => {
current.value -= num;
};
const plus = (num: number) => {
current.value += num;
};
const set = (num: number) => {
current.value = num;
};
const reset = () => {
current.value = init;
}; watch(current, (newVal: number, oldVal: number) => {
if (newVal === oldVal) { return; }
if (newVal < +range.min) {
current.value = +range.min;
} else if (newVal > +range.max) {
current.value = +range.max;
}
}); return { current, minus, plus, set, reset };
}
比较简单,ref传单一变量,reactive传复杂变量(对象),效果就是这样
再贴一下模板代码吧
<template>
<div class="home">
<img alt="Vue logo" src="../assets/logo.png" />
<!-- <HelloWorld msg="Welcome to Your Vue.js + TypeScript App"/> -->
<h1>{{ title1 }}</h1>
<h1>{{ title2 }}</h1>
<p>current count: {{ current }}</p>
<div>
<label>MIN COUNT: </label>
<input type="number" v-model="range.min" />
</div>
<br />
<div>
<label>MAX COUNT: </label>
<input type="number" v-model="range.max" />
</div>
<br />
<button @click="plus(5)">+5</button>
<button @click="minus(3)">-3</button>
<button @click="set(233)">set 233</button>
<button @click="reset()">reset</button>
</div>
</template>
使用vue和react的hooks之后,明显感觉vue的要简单明了很多,也不会有很多闭包问题、多次调用等,没有太多的限制,很容易上手。这一点做得比react好很多。
vue3自定义Hooks的更多相关文章
- 自定义Hooks函数获取窗口大小(十一)
其实自定义Hooks函数和用Hooks创建组件很相似,跟我们平时用JavaScript写函数几乎一模一样,可能就是多了些React Hooks的特性,自定义Hooks函数偏向于功能,而组件偏向于界面和 ...
- 我居然不知道Vue3可以使用hooks函数实现代码复用?
每天都要开心(▽)哇: 项目开发过程中,我们会遇到一些情况,就是多个组件都可以重复使用的一部分代码逻辑,功能函数,我们想要复用,这可怎么办呢? VUE2我们是怎么做的呢? 在vue2 中有一个东西:M ...
- vue3 自定义指令控制按钮权限
经过1个周的摸索和查阅资料,终于搞定VUE3中自定义指令,实现按钮级别的权限控制.当然,只是简单的对按钮进行隐藏和删除的dom操作比较容易,一直纠结的是当按钮无权限时,不是直接删除当前dom元素(bu ...
- Vue3 自定义指令执行了两次的问题
下面是我注册全局指令的代码,这是我注册的一个通过 hljs 解析 html -> pre code 的指令,数据是异步获取的: app.directive("parse-code&qu ...
- vue3 自定义组件中使用 v-model
1.直接绑定 v-model,但是 Props 要固定为 modelValue 组件D: 注意这里的 Props 和 Emits,必须使用 Vue 提供的 defineProps() 和 define ...
- 简单对比vue2.x与vue3.x响应式及新功能
简单对比vue2.x与vue3.x响应式 对响应方式来讲:Vue3.x 将使用Proxy ,取代Vue2.x 版本的 Object.defineProperty. 为何要将Object.defineP ...
- 初探React Hooks & SSR改造
Hooks React v16.8 发布了 Hooks,其主要是解决跨组件.组件复用的状态管理问题. 在 class 中组件的状态封装在对象中,然后通过单向数据流来组织组件间的状态交互.这种模式下,跨 ...
- 从Mixin到hooks,谈谈对React16.7.0-alpha中即将引入的hooks的理解
为了实现分离业务逻辑代码,实现组件内部相关业务逻辑的复用,在React的迭代中针对类组件中的代码复用依次发布了Mixin.HOC.Render props等几个方案.此外,针对函数组件,在Reac ...
- React劲爆新特性Hooks 重构去哪儿网火车票PWA
React劲爆新特性Hooks 重构去哪儿网火车票PWA 获取课程资料链接:点击这里获取 本课程先带你细数最近一年来React的新特性,如Hooks.Redux API,让你从头理解Hooks对传统R ...
- React Hooks究竟是什么呢?
摘要: React Hooks原理解析. 原文:快速了解 React Hooks 原理 译者:前端小智 我们大部分 React 类组件可以保存状态,而函数组件不能? 并且类组件具有生命周期,而函数组件 ...
随机推荐
- PGO前瞻
原文在这里. 原文发布于2023年2月8日 在构建Go二进制文件时,Go编译器会进行优化,以尽可能生成性能最佳的二进制文件.例如,常量传播可以在编译时对常量表达式进行求值,避免了运行时的计算开销:逃逸 ...
- c++基础之函数
距离上次更新又过了一周,又该更新新的读书笔记了.本次更新的主要是c++中函数部分的内容 c++ 中的函数与c语言中的函数大致用法或者语法是一样的,这里就不就这点详细展开了.需要注意的是c/c++中并没 ...
- 关于elementui日期组件 date.getHours() is not a function 等问题
问题 日期控件中,假设当前显示日期为2020-01-01,现在需要修改为2020-01-03:点开日期组件框点击选择其他日期时, 控制台有可能会报错,显示 date.getHours() is n ...
- React框架运行机制
React框架运行主流程 1.JSX是JS语言的扩展,被babel编译后,会转换成React.creatElement(),这个方法返回的是一个虚拟DOM. 2.将虚拟DOM渲染到真实DOM的方法是R ...
- 关于ASP.NET WEB API(OWIN WEBAPI)的几个编码最佳实践总结
近期工作比较忙,确实没太多精力与时间写博文,博文写得少,但并不代表没有研究与总结,也不会停止我继续分享的节奏,最多有可能发博文间隔时间稍长一点.废话不多说,直接上干货,虽不是主流的ASP.NET CO ...
- MySQL 中 针对表和列的注释,方便使用其生成的实体类。mybatis-generator
- google三驾马车之一:Bigtable解读(英文版)
本文重点关注了系统设计相关的内容,paper后半部分的具体应用此处没有过多涉及.从个人笔记修改而来,因此为英文版本. Bigtable: A Distributed Storage System fo ...
- Pandas 美国竞选捐赠案例
import pandas as pd """ 需求 1.加载数据 2.查看数据的基本信息 3.指定数据截取,将如下字段的数据进行提取,其他数据舍弃 cand_nm: 候 ...
- JS 判断两个数组是否相等,元素以及顺序相等,顺序不同但元素相等
壹 ❀ 引 在日常开发中,判断两个数组是否相等应该是较为常见的场景,因为常用,所以想着简单记录下.关于判断数组相等,这里我分为两种场景,第一种是数组完全相等,即数组元素相同且元素顺序一致:第二则为元素 ...
- NC50614 取石子游戏 1
题目链接 题目 题目描述 有一种有趣的游戏,玩法如下: 玩家:2人: 道具:N颗石子: 规则: 游戏双方轮流取石子:每人每次取走若干颗石子(最少取1颗,最多取K颗):石子取光,则游戏结束:最后取石子的 ...