vue3使用composables来取代mixins 来状态复用
前言
最简单理解composables的方式 就是将其视为vue版的自定义hooks
来个demo
比如 页面初始化的时候 我需要请求接口 获取数据 并回填至表单
以前的做法
src/pages/index.vue
<script setup lang="ts">
import { ref, onBeforeMount } from "vue";
import { FormInit } from "./types";
import api from "../../service";
onBeforeMount(() => {
syncForm();
});
// 表单字段
const form = ref<FormInit>({name:'张三',phone:18211223344});
// 获取基本信息 初始化的时候 回显表单信息
const synctForm = async () => {
const { data } = await api.getFormDate();
form.value = data.data;
};
// 提交
const onSubmit = async (values: any) => {
console.log(values);
};
</script>
<template>
<van-nav-bar title="表单收集" />
<van-form @submit="onSubmit">
<van-cell-group inset>
<van-field
v-model="form.name"
name="name"
label="姓名"
:required="true"
/>
<van-field
v-model="form.phone"
type="number"
name="phone"
label="手机号"
:required="true"
/>
</van-cell-group>
<div>
<van-button round block type="primary" native-type="submit">
提交
</van-button>
</div>
</van-form>
</template>
现在的做法
src/composables/index.ts
(可以看得出 它就像一个没有模板的vue组件)
import axios from "axios";
import { ref, onBeforeMount } from "vue";
import api from "../service";
// 初始化时回显表单信息
export const useForm = <T>(formInit: T) => {
onBeforeMount(() => {
syncForm();
});
const form = ref<T>(formInit);
const syncForm = async () => {
const { data } = await api.getFormDate();
form.value = { ...formInit, ...data.data };
};
return { form , syncForm };
};
src/pages/index.vue
<script setup lang="ts">
import { useForm } from "../../composables";
import { FormInit } from "./types";
// 表单字段
const { form } = useForm <FormInit>({name:'张三',phone:18211223344});
// 提交
const onSubmit = async (values: any) => {
console.log(values);
};
</script>
<template>
<van-nav-bar title="表单收集" />
<van-form @submit="onSubmit">
<van-cell-group inset>
<van-field
v-model="form.name"
name="name"
label="姓名"
:required="true"
/>
<van-field
v-model="form.phone"
type="number"
name="phone"
label="手机号"
:required="true"
/>
</van-cell-group>
<div>
<van-button round block type="primary" native-type="submit">
提交
</van-button>
</div>
</van-form>
</template>
核心部分
核心变化是:将状态的定义和赋值 抽离出去了
之前的index.vue
onBeforeMount(() => {
syncForm();
});
// 表单字段
const form = ref<FormInit>({name:'张三',phone:18211223344});
// 获取基本信息 初始化的时候 回显表单信息
const synctForm = async () => {
const { data } = await api.getFormDate();
form.value = data.data;
};
现在的index.vue
// 表单字段
const { form } = useForm <FormInit>({name:'张三',phone:18211223344});
vue3使用composables来取代mixins 来状态复用的更多相关文章
- 简简单单的Vue3(插件开发,路由系统,状态管理)
既然选择了远方,便只顾风雨兼程 __ HANS许 系列:零基础搭建前后端分离项目 系列:零基础搭建前后端分离项目 插件 路由(vue-router) 状态管理模式(Vuex) 那在上篇文章,我们讲了, ...
- 尝试Vue3.0
Composition API 纯函数式 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...
- 一文解析Pinia和Vuex,带你全面理解这两个Vue状态管理模式
Pinia和Vuex一样都是是vue的全局状态管理器.其实Pinia就是Vuex5,只不过为了尊重原作者的贡献就沿用了这个看起来很甜的名字Pinia. 本文将通过Vue3的形式对两者的不同实现方式进行 ...
- jvm高级特性(6)(线程的种类,调度,状态,安全程度,实现安全的方法,同步种类,锁优化,锁种类)
JVM高级特性与实践(十三):线程实现 与 Java线程调度 JVM高级特性与实践(十四):线程安全 与 锁优化 一. 线程的实现 线程其实是比进程更轻量级的调度执行单位. 线程的引入,可以把一个检查 ...
- 在小程序中实现 Mixins 方案
摘要: 小程序开发技巧 作者:jrainlau 原文:在小程序中实现 Mixins 方案 Fundebug经授权转载,版权归原作者所有. 在原生开发小程序的过程中,发现有多个页面都使用了几乎完全一样的 ...
- 线程基础知识 04 synchronized锁的四种状态和升级
转https://www.cnblogs.com/mingyueyy/p/13054296.html 1 轻量级锁和重量级锁简要说明 线程调度本来是由操作系统来管理的.现在,操作系统上跑了一个虚拟机J ...
- react创建组件的几种方式及其区别
react创建组件有如下几种方式 ①.函数式定义的无状态组件 ②.es5原生方式React.createClass定义的组件 ③.es6形式的extends React.Component定义的组 ...
- [Full-stack] 快速上手开发 - React
故事背景 [1] 博客笔记结合<React快速上手开发>再次系统地.全面地走一遍. [2] React JS Tutorials:包含了JS --> React --> Red ...
- React创建组件的三种方式及其区别
内容转载于http://www.cnblogs.com/wonyun/p/5930333.html React推出后,出于不同的原因先后出现三种定义react组件的方式,殊途同归; 具体的三种方式: ...
- 301-React Ext-React创建组件的三种方式及其区别
一.概述 React推出后,出于不同的原因先后出现三种定义react组件的方式,殊途同归:具体的三种方式: 函数式定义的无状态组件 es5原生方式React.createClass定义的组件 es6形 ...
随机推荐
- 『Plotly实战指南』--面积图绘制与应用
在数据可视化领域,面积图是一种强大而直观的工具,它通过填充线条与坐标轴之间的区域来量化数据大小, 从而帮助我们清晰地展示数据的总量.趋势变化以及不同类别之间的对比. 无论是分析随时间变化的累积量,还是 ...
- RocketMQ的Consumer是如何消费消息的
Rocketmq提供了两种主要的消费模式:推送式消费(Push Consumer)和 拉取式消费(Pull Consumer) 一.Consumer消费消息的基本流程 1.实例化Consumer:创建 ...
- PriorityBlockingQueue 的put方法底层源码
一.PriorityBlockingQueue 的put方法底层源码 PriorityBlockingQueue 的 put 方法用于将元素插入队列.由于 PriorityBlockingQueue ...
- Linux 常识和操作(常用命令)
1. 存放用户账号的文件在哪里? /etc/passwd 2. 如何删除一个非空的目录? rm -rf 目录名 3. 查看当前的工作目录用什么命令? pwd 4. 创建一个文件夹用什么命令? mkdi ...
- HarmonyOS NEXT开发实战案例--抽奖转盘
这是之前写过的一个项目,后来删掉了,现在适配到api12重新发布,友友们按需查阅. 本文主要通过抽奖转盘小项目讲解在鸿蒙开发中如何使用画布组件Canvas绘制图形和文字,以及转圈动画的实现.效果图如下 ...
- SQL优化 - 同比计算
记录一次SQL优化, 在计算同比的时候. 就太久没有写语句了, 能力在逐渐下滑, 思维也是, 感觉还是有点可怕的. 自从转业务以来, 就基本没有碰过代码这方面了. 甚至连 SQL 都开始要搜索了. 而 ...
- RNN - 梯度消失与爆炸
Last we learned Recurrent Neural Netwoks (RNN) and why they'er great for Language Modeling (LM) 就之前整 ...
- 告别源码阅读困境!五款 AI 工具强势救场
一.简介 阅读项目源码困难重重,复杂的代码结构.繁多的依赖关系,常常让开发者们焦头烂额.别慌!这里有五款AI工具,堪称源码阅读神器,能帮你轻松搞定这些难题,快速理解项目核心,提升开发效率. 文章首发公 ...
- .NET外挂系列:7. harmony在高级调试中的一些实战案例
一:背景 1. 讲故事 如果你读完前六篇,我相信你对 harmony 的简单使用应该是没什么问题了,现在你处于手拿锤子看谁都是钉子的情况,那这篇我就找高级调试里非常经典的 3个钉子 让大家捶一锤. 二 ...
- 服务器接口附件限制【1M】解决办法
一.业务场景: 在后端与手机小程序端接口传附件时,发现经过云服务器的接口交互,附件超过1M就会有如下提示: <html> <head><title> ...