1. Vue3入门

文章目录

      • 使用create-vue创建项目
      • 关键文件
      • <script setup>语法糖
      • 组合式API - reactive和ref函数
      • 组合式API - computed
      • 组合式API - watch
      • 组合式API - 生命周期函数
      • 组合式API - 父子通信
      • 组合式API - 模版引用
      • 组合式API - provide和inject
      • 综合案例

使用create-vue创建项目

npm init vue@latest

image.png

关键文件

image.png

<script setup>const message = 'this is message'const logMessage = ()=>{console.log(message)}
</script>/*** 等同于*/
<script>export default {setup(){const message = 'this is message'const logMessage = ()=>{console.log(message)}// 必须return才可以return {message,logMessage}}}
</script>

组合式API - reactive和ref函数

接受对象类型数据的参数传入并返回一个响应式的对象

<script setup>// 导入import { reactive } from 'vue'// 执行函数 传入参数 变量接收const state = reactive({msg:'this is msg'})const setSate = ()=>{// 修改数据更新视图state.msg = 'this is new msg'}
</script><template>{{ state.msg }}<button @click="setState">change msg</button>
</template>

接收简单类型或者对象类型的数据传入并返回一个响应式的对象

<script setup>// 导入import { ref } from 'vue'// 执行函数 传入参数 变量接收const count = ref(0)const setCount = ()=>{// 修改数据更新视图必须加上.valuecount.value++}
</script><template><button @click="setCount">{{count}}</button>
</template>

推荐使用ref函数,减少记忆负担

组合式API - computed

<script setup>
import { ref } from 'vue'
import { computed } from 'vue'const list = ref( [1, 2, 3, 4, 5, 6, 7, 8] )
const computedList = computed( () => {return list.value.filter(item => item > 2)
})
</script><template><div><p>原始数据 - {{ list }}</p></div><div><p>计算结果 - {{ computedList }}</p></div>
</template>

组合式API - watch

侦听单个数据

<script setup>
import { ref, watch } from 'vue'const count = ref( 0 )
watch( count, ( newValue, oldValue ) => {console.log( 'count', newValue, oldValue )
} )const increment = () => {count.value++
}
</script><template><div><button @click="increment">{{ count }}</button></div>
</template>

侦听多个数据

<script setup>
import { ref, watch } from 'vue'const count = ref( 0 )
const increment = () => {count.value++
}const name = ref( 'Vue3' )
const changeName = () => {name.value = 'Vue3.x'
}watch( [count, name], ( [newValue, oldValue], [newName, oldName] ) => {console.log( 'count', newValue, oldValue, 'name', newName, oldName )
} )</script><template><div><button @click="increment">{{ count }}</button></div><div><button @click="changeName">{{ name }}</button></div>
</template>

立即执行immediate

<script setup>
import { ref, watch } from 'vue'const count = ref( 0 )
const increment = () => {count.value++
}watch( count, () => {console.log( 'count', count.value )
}, {immediate: true
})
</script><template><div><button @click="increment">{{ count }}</button></div>
</template>

深度监听(有性能损耗, 尽量不使用)

<script setup>
import { ref, watch } from 'vue'const state = ref( {count: 0} )
const increment = () => {state.value.count++
}watch( state, () => {console.log( 'count', state.value.count )
}, {deep: true
})
</script><template><div><button @click="increment">{{ state.count }}</button></div>
</template>

精确监听

<script setup>
import { ref, watch } from "vue";const state = ref({ count: 0, age: 18 });
const increment = () => {state.value.count++;
};watch(// 精确侦听某个属性() => state.value.age,() => {console.log("count", state.value.count);}
);
</script>

组合式API - 生命周期函数

image.png

  1. 生命周期函数基本使用
<scirpt setup>
import { onMounted } from 'vue'
onMounted(()=>{// 自定义逻辑
})
</script>
  1. 执行多次
// 生命周期函数执行多次的时候,会按照顺序依次执行
<scirpt setup>
import { onMounted } from 'vue'
onMounted(()=>{// 自定义逻辑
})onMounted(()=>{// 自定义逻辑
})
</script>

组合式API - 父子通信

  1. 父传子

image.png

  1. 子传父

image.png

组合式API - 模版引用

通过 ref标识 获取真实的 dom对象或者组件实例对象

image.png

defineExpose

通过defineExpose编译宏指定哪些属性和方法容许访问
image.png

组合式API - provide和inject

  1. 跨层传递普通数据

image.png

  1. 跨层传递响应数据

image.png

  1. 跨层传递方法

image.png

综合案例

<script setup>
import Edit from './components/Edit.vue'
import { onMounted, ref } from 'vue';
import axios from 'axios';// TODO: 列表渲染
// 声明响应式list -> 调用接口获取数据 -> 后端数据复制给list -> 绑定到table组件const list = ref( [] )
const getList = async () => {// 接口调用const res = await axios.get( '/list' )// 赋值数据list.value = res.data
}onMounted(() => getList())// TODO: 删除功能
// 获取当前行id -> 通过id调用删除接口 -> 更新最新列表数据
const onDelete = async (id) => {console.log( id );await axios.delete( `/del/${ id }` )getList()
}// TODO: 编辑功能
const editRef = ref(null)
const onEdit = ( row ) => {editRef.value.open(row)
}</script><template><div class="app"><el-table :data="list"><el-table-column label="ID" prop="id"></el-table-column><el-table-column label="姓名" prop="name" width="150"></el-table-column><el-table-column label="籍贯" prop="place"></el-table-column><el-table-column label="操作" width="150"><template #default="{ row }"><el-button type="primary" @click="onEdit(row)" link>编辑</el-button><el-button type="danger" @click="onDelete(row.id)" link>删除</el-button></template></el-table-column></el-table></div><Edit ref="editRef" @on-update="getList()"/>
</template><style scoped>
.app {width: 980px;margin: 100px auto 0;
}
</style>
<script setup>
// TODO: 编辑
import { ref } from "vue";
import axios from "axios";
// 弹框开关
const dialogVisible = ref(false);// 准备form
const form = ref({name: "",place: "",
});const open = (row) => {console.log(row);dialogVisible.value = true;const { name, place, id } = row;form.value.name = name;form.value.place = place;form.value.id = id;
};// 编辑功能
const emit = defineEmits(["on-update"]);
// 1. 收集表单数据, 调用接口
const onUpdate = async () => {axios.patch(`/edit/${form.value.id}`, form.value);// 2. 关闭弹框dialogVisible.value = false;// 3. 通知父组件做列表更新emit("on-update");
};defineExpose({open,
});
</script><template><el-dialog v-model="dialogVisible" title="编辑" width="400px"><el-form label-width="50px"><el-form-item label="姓名"><el-input placeholder="请输入姓名" v-model="form.name" /></el-form-item><el-form-item label="籍贯"><el-input placeholder="请输入籍贯" v-model="form.place" /></el-form-item></el-form><template #footer><span class="dialog-footer"><el-button @click="dialogVisible = false">取消</el-button><el-button type="primary" @click="onUpdate">确认</el-button></span></template></el-dialog>
</template><style scoped>
.el-input {width: 290px;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3269006.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙HarmonyOS【应用开发五、布局使用】

✍️作者简介&#xff1a;小北编程&#xff08;专注于HarmonyOS、Android、Java、Web、TCP/IP等技术方向&#xff09; &#x1f433;博客主页&#xff1a; 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN &#x1f514;如果文章对您有一定的帮助请&#x1f…

CogVideo 实测,智谱「清影」AI视频生成,全民免费,连 API 都开放了!

不得不说&#xff0c;AI 视频生成界最近非常火热~ 前有快手「可灵」开放内测&#xff0c;一下子带火了老照片修复&#xff0c;全网刷屏&#xff1a; 怕是你还没拿到内测资格&#xff0c;被称为 “国货之光” 的「可灵」就结束了免费无限量模式。每天只有66点的免费额度&#x…

【全国大学生电子设计竞赛】2023年H题

&#x1f970;&#x1f970;全国大学生电子设计大赛学习资料专栏已开启&#xff0c;限时免费&#xff0c;速速收藏~

鸿蒙华为登录(以及导航页面跳转)

//登录华为登录界面以及跳转 //切记一定要写路径&#xff0c;不写路径&#xff0c;容易报错&#xff0c;还有一定要记得导一下包&#xff08;Arouter&#xff09; //接下来是鸿蒙界面导航跳转 //进行跳转 TabContent组件不支持设置通用宽度属性&#xff0c;其宽度默认撑满Tab…

AI周报(7.21-7.27)

AI应用-一款能提供情绪价值的智能鸟类喂食器&#xff08;Bird Buddy&#xff09; 图像识别技术&#xff1a;Bird Buddy装备了图像识别技术&#xff0c;能够识别超过1000种鸟类&#xff0c;涵盖了常见的鸟类品种。这种技术能够在鸟类经过时&#xff0c;通过内置麦克风捕捉的声音…

ctfshow web入门 中期测评 web492--web502

web492 <?php include(render/render_class.php); include(render/db_class.php);$action$_GET[action]; if(!isset($action)){header(location:index.php?actionlogin);die(); }if($actioncheck){extract($_GET);if(preg_match(/^[A-Za-z0-9]$/, $username)){$sql &qu…

GUL图形化界面操作(下部)

目录 ​编辑 前言 Swing 窗口 注意点 新增的组件 进度条组件 开关按钮 多面板和分割面板 多面板 分割面板 ​编辑 选项窗口 对话框带三个选项是&#xff0c;否&#xff0c;取消。 对话框提示输入文本: 前言 修炼中&#xff0c;该篇文章为俺很久前的学习笔记 Swi…

【React】详解 Redux 状态管理

文章目录 一、Redux 的基本概念1. 什么是 Redux&#xff1f;2. Redux 的三大原则 二、Redux 的核心组件1. Store2. Action3. Reducer 三、Redux 的使用流程1. 安装 Redux 及其 React 绑定2. 创建 Action3. 创建 Reducer4. 创建 Store5. 在 React 应用中使用 Store6. 连接 React…

网络通信---UDP

前两天做了个mplayer项目&#xff0c;今日继续学习 网络内容十分重要&#xff01;&#xff01;&#xff01; 1.OSI七层模型 应用层:要传输的数据信息&#xff0c;如文件传输&#xff0c;电子邮件等&#xff08;最接近用户&#xff0c;看传输的内容类型到底是什么&#xff09; …

【资料分享】2024第三届钉钉杯大学生大数据挑战赛B题思路解析+双语言代码

2024钉钉杯大学生大数据挑战赛&#xff0c;B题解题思路和双语言代码分享&#xff0c;资料预览&#xff1a;

jenkins参数化构建在UI中定义脚本中使用

先看配置&#xff1a; 流水线脚本&#xff1a; pipeline {agent {//label "${server}"label "${28}"}stages {stage(Hello) {steps {echo "--------------------------"// 只有这个可以输出变量echo "${character_argument}"echo &q…

瑞芯微芯片资料中关于图像处理相关的知识点

目录 MPI层模块介绍IPC的应用像素格式排布系统绑定API接口 MPI层 文件&#xff1a;Rockchip_Developer_Guide_MPI.pdf RK MPI&#xff1a;Rockchip Media Process Interface&#xff0c;媒体处理接口。 模块介绍 RK MPI层的模块介绍&#xff1a; IPC的应用 VI 模块捕获视频…

WordPress原创插件:自定义文章标题颜色

插件设置截图 文章编辑时&#xff0c;右边会出现一个标题颜色设置&#xff0c;可以设置为任何颜色 更新记录&#xff1a;从输入颜色css代码&#xff0c;改为颜色选择器&#xff0c;更方便&#xff01; 插件免费下载 https://download.csdn.net/download/huayula/89585192…

【一图流】Git下载与安装教程

下载Git Git官网&#xff1a;https://git-scm.com/?hlzh-cn 安装Git

IDEA git配置

1. git下载 您可以从git官方网站下载git。在https://git-scm.com/downloads下载页面上&#xff0c;您可以选择适用于您的操作系统的版本进行下载。 2、idea配置git(version control)

一步步教你学会如何安装VMare虚拟机(流程参考图)

前言&#xff1a;一步步教你安装VMare虚拟机&#xff08;此版本为17.5。2版本&#xff09;。 1、安装 2、确认协议 3、选择位置存放 4、选择第二个 5、都不选。 6、都选提供便捷操作 7、点击许可证&#xff0c;将密钥输入&#xff08;可以在网络寻找自己版本的密钥&#xff…

Linux定时器与时间轮 实现网络连接超时关闭

目录 原理理解 定时器超时触发可读事件机制 定时器 Linux定时器 Linux内核定时器API 时间轮 ​编辑 使用方法 时间轮与基于事件驱动配合 回调函数与定时器 梳理定时器加入到Reactor服务器的整体逻辑 EventLoop模块如何将新连接放入时间轮管理 新连接和定时器封装逻辑…

【系统架构设计师】十九、层次式架构设计理论与实践②

目录 四、数据访问层设计 4.1 数据访问模式 4.2 工厂模式在数据库访问层的应用 4.3 JavaBean中使用 JDBC 方式进行事务处理 4.4 连接对象管理设计 五、数据架构规划与设计 相关推荐 四、数据访问层设计 4.1 数据访问模式 数据访问模式有 5 种&#xff0c;分别是&#…

Ubuntu设置网络

进入网络配置文件夹 cd /etc/netplan 使用 vim 打开下的配置文件 打开后的配置 配置说明&#xff1a; network:# 网络配置部分ethernets:# 配置名为ens33的以太网接口ens33:addresses:# 为ens33接口分配IP地址192.168.220.30&#xff0c;子网掩码为24位- 192.168.220.30/24n…

爬虫 APP 逆向 ---> 粉笔考研

环境&#xff1a; 粉笔考研 v6.3.15&#xff1a;https://www.wandoujia.com/apps/1220941/history_v6031500雷电9 模拟器&#xff1a;https://www.ldmnq.com/安装 magisk&#xff1a;https://blog.csdn.net/Ruaki/article/details/135580772安装 Dia 插件 (作用&#xff1a;禁…