vue3 props用法(vue3组合API中setup、 ref、reactive的使用大全)
类别:编程学习 浏览量:1230
时间:2022-01-14 02:47:38 vue3 props用法
vue3组合API中setup、 ref、reactive的使用大全1.初识setUp的使用
简单介绍下面的代码功能:
使用ref函数,去使用监听某一个变量的变化,并且把它渲染到视图上。
setUp函数是组合API的入口函数。这个是非常重要的。
setUp可以去监听变量的变化哈!我们将会利用它
ref 在vue中内置,需要导入。
<template> <li>{{ countNum}}</li> <button @click="handerFunc">按钮</button> </template> <script> import {ref} from 'vue' export default { name: 'App', setup() { // 这一句表示的是定义了一个变量count。这个变量的初始值是100 let countNum=ref(100); // 在组合API中,如果想定义一个方法,不用定义到methods中去。直接定义就可以了 function handerFunc(){ // console.log(countNum);//countNum是一个对象 countNum.value += 10; } //在组合api中定义的方法,或者变量。如果外界需要使用,那么必须通过 return {aaa,func} 的方式暴露出去 return { countNum ,handerFunc} } } </script>
2认识reactive的使用
ref函数只能够去监听简单类型的数据变化。
不能够去监听,复杂类型的变化(数组、对象)。
所以我们的主角reactive就出现了。
setup 中的函数会自动执行一次。
<template> <li> <ul> <li v-for="item in satte.arr" :key="item.id"> {{item.name }} </li> </ul> </li> </template> <script> import {reactive} from 'vue' export default { name: 'App', setup(){ console.log("setUp会自动执行的") // ref函数的注意点: // ref函数只能够去监听简单类型的数据变化,不能够去监听,复杂类型的变化(数组、对象) // reactive 方法里面是一个对象 let satte=reactive({ arr:[ {name:"司藤",id:'0011'}, {name:"皮囊之下",id:'0011'}, {name:"百岁之约",id:'0012'}, {name:"三生三世",id:'0013'}, ] }) return { satte } }, } </script>
3使用reactive
实现视图的删除
<template> <li> <ul> <li v-for="(item,index) in satte.arr" :key="index" @click="del(index)"> {{item.name }} </li> </ul> </li> </template> <script> import {reactive} from 'vue' export default { name: 'App', setup(){ let satte=reactive({ arr:[ {name:"司藤",id:'0011'}, {name:"皮囊之下",id:'0011'}, {name:"百岁之约",id:'0012'}, {name:"三生三世",id:'0013'}, ] }) // 删除被点击的元素 function del(index){ for(let i=0;i<satte.arr.length;i++){ if(index==i){ satte.arr.splice(i,1) } } } return { satte, del} }, } </script>
4将删除的逻辑分离出去
形成一个单独的模块
<template> <li> <ul> <li v-for="(item,index) in satte.arr" :key="index" @click="del(index)"> {{item.name }} </li> </ul> </li> </template> <script> import {reactive} from 'vue' export default { name: 'App', setup(){ // onlyDelLuoJi() 方法中含有一个数组 和一个方法;类似于解构 let {satte,del }=onlyDelLuoJi(); // 暴露给外界使用 return { satte,del} }, } function onlyDelLuoJi(){ let satte=reactive({ arr:[ {name:"司藤",id:'0011'}, {name:"皮囊之下",id:'0011'}, {name:"百岁之约",id:'0012'}, {name:"三生三世",id:'0013'}, ] }) // 删除被点击的元素 function del(index){ for(let i=0;i<satte.arr.length;i++){ if(index==i){ satte.arr.splice(i,1) } } } // 将数据satte 和方法 del 暴露出去 return { satte,del } } </script>
5. 实现添加功能
事件之间传递参数
<template> <li> <li> <input type="text" v-model="addobj.watchTv.name"> <button @click="addHander">添加</button> </li> <ul> <li v-for="(item,index) in satte.arr" :key="index" @click="del(index)"> {{item.name }} </li> </ul> </li> </template> <script> import {reactive} from 'vue' export default { name: 'App', setup(){ // onlyDelLuoJi() 方法中含有一个数组 和一个方法;类似于解构 let {satte,del }=onlyDelLuoJi(); // 传递参数satte 是onlyDelLuoJi函数中提供的satte。进行传递 let { addobj,addHander }=OnlyaddHander(satte); // 暴露给外界使用 return { satte,del,addobj, addHander} }, } //添加功能模块 function OnlyaddHander(satte){ console.log('初始化添加',satte) let addobj=reactive({ watchTv:{ name:"", id:"" } }); function addHander(){ // 重置清空 错吴做法 // satte.arr.push(addobj.watchTv) // addobj.watchTv.name = ""; // addobj.watchTv.id = ""; // 正确做法 let oldobj = Object.assign({}, addobj.watchTv) satte.arr.push(oldobj) } return { addobj,addHander } } //删除功能模块 function onlyDelLuoJi(){ console.log('删除初始化') let satte=reactive({ arr:[ {name:"司藤",id:'0011'}, {name:"皮囊之下",id:'0011'}, {name:"百岁之约",id:'0012'}, {name:"三生三世",id:'0013'}, ] }) // 删除被点击的元素 function del(index){ for(let i=0;i<satte.arr.length;i++){ if(index==i){ satte.arr.splice(i,1) } } } // 将数据satte 和方法 del 暴露出去 return { satte,del } } </script>
6 将他们抽离成单独的文件
我们想在想将添加删除相关的逻辑,单独抽离成一个文件。
add.js 是添加相关的逻辑
del.js 是删除的相关逻辑
import { reactive } from "vue" function OnlyaddHander(satte){ console.log('初始化添加',satte) let addobj=reactive({ watchTv:{ name:"", id:"" } }); function addHander(e){ // 重置清空 错吴做法 // satte.arr.push(addobj.watchTv) // addobj.watchTv.name = ""; // addobj.watchTv.id = ""; // 正确做法 let oldobj = Object.assign({}, addobj.watchTv) satte.arr.push(oldobj) e.preventDefault(); } return { addobj,addHander } } export default OnlyaddHander
adel.js
import {reactive } from "vue" function onlyDelLuoJi() { console.log('删除初始化') let satte=reactive({ arr:[ {name:"司藤",id:'0011'}, {name:"皮囊之下",id:'0011'}, {name:"百岁之约",id:'0012'}, {name:"三生三世",id:'0013'}, ] }) // 删除被点击的元素 function del(index){ for(let i=0;i<satte.arr.length;i++){ if(index==i){ satte.arr.splice(i,1) } } } // 将数据satte 和方法 del 暴露出去 return { satte,del } } export default onlyDelLuoJi
主文件
<template> <li> <li> <input type="text" v-model="addobj.watchTv.name"> <button @click="addHander">添加</button> </li> <ul> <li v-for="(item,index) in satte.arr" :key="index" @click="del(index)"> {{item.name }} </li> </ul> </li> </template> <script> import onlyDelLuoJi from "./components/del" import OnlyaddHander from "./components/add" export default { name: 'App', setup(){ // onlyDelLuoJi() 方法中含有一个数组 和一个方法;类似于解构 let {satte,del }=onlyDelLuoJi(); // 传递参数 let { addobj,addHander }=OnlyaddHander(satte); // 暴露给外界使用 return { satte,del,addobj, addHander} }, } </script>
以上就是vue3组合API中setup、 ref、reactive的用法的详细内容,更多关于vue组合API的资料请关注开心学习网其它相关文章!
您可能感兴趣
- vue组件之间的通信(超详细的vue组件间通信总结)
- vue 中后台管理系统(Vue实现学生管理功能)
- vuejs全家桶入门教程交流(Vue全家桶入门基础教程)
- vue左右滑动切换(vue实现界面滑动效果)
- vue怎么实现输入框(vue车牌输入组件使用方法详解)
- vue中的定时函数(vue计时器的实现方法)
- vue elementui 公共列表组件(Vue Element-ui表单校验规则实现)
- vue使用elementui框架(总结Vue Element UI使用中遇到的问题)
- vue怎么实现拖动(Vue拖动截图功能的简单实现方法)
- vue设置div大小(Vue实现div滚轮放大缩小)
- vue 表格数据增加修改(vue element实现表格增加删除修改数据)
- vue集成文件上传插件(vue 实现上传组件)
- vuevlog制作软件(Vue实现Dialog封装)
- vue找不到水印设置(Vue使用自定义指令实现页面底部加水印)
- vue实现一个tab栏(Vue实现tab导航栏并支持左右滑动功能)
- vue如何在tab标签页循环加定时器(vue实现tab标签标签超出自动滚动)
- 《小敏家》金波想要复婚 这只是他圈套的第1步,更可恶的在后面(小敏家金波想要复婚)
- 小敏家 剧情离谱一锅乱炖,但他们俩绝对是这部剧的一大 亮点(剧情离谱一锅乱炖)
- 《倚天屠龙记》再遭翻拍,关晓彤主演赵敏,蒋劲夫演张无忌,你怎么看(倚天屠龙记再遭翻拍)
- 吴启华与曾舜晞两代张无忌同框,戏里经典的他却没活出原著的潇洒(吴启华与曾舜晞两代张无忌同框)
- 经常发这三种 朋友圈 的人,要迅速屏蔽(经常发这三种朋友圈)
- 有种尴尬叫朋友圈忘屏蔽,大学生上演社死现场,父母亲自下场吐槽(有种尴尬叫朋友圈忘屏蔽)
热门推荐
- pandas获取对应数值的索引(对pandas通过索引提取dataframe的行方法详解)
- css浮动小例子教程(使用css transition属性实现一个带动画显隐的微信小程序部件)
- linux如何安装php7.1.5环境(vmware linux系统安装最新的php7图解)
- 数据库常见的索引结构(数据库索引知识点整理)
- navicat连接报错10038(解决Navicat for Mysql连接报错1251的问题连接失败)
- python实现在同一电脑上tcp通信(Python两台电脑实现TCP通信的方法示例)
- vue原理详解(vue响应式原理与双向数据的深入解析)
- css3字体怎么设置(使用CSS3 font-feature-settings特性减除字体动画震颤效果)
- css3渐变动画(CSS3径向渐变radial-gradient实现波浪边框和内倒角的方法)
- docker部署高性能服务器(Docker部署SQL Server 2019 Always On集群的实现)