vue3的一些基本常识(slot,ref)

摘要:
插槽:vue3建议写入v-Slot。与@和:v-slot类似,它们也可以简化为#符号。演示如下:子组件的编写保持不变:hello:从“@vue/reactive”导入{reactive};Constobj=reactiveconstsetName==˃{obj.name=name}/***要向父组件公开的方法和属性必须写入defineExpose,否则*/defineExpose父组件:{//无法修改子组件的属性?

slot:

vue3推荐v-slot的写法,类似@和:v-slot也可以简化为#符号,demo如下:

子组件写法不变:

<template>
  <div>
    hello:
    <slot name="fruits" :fruitsName="obj.name" :freshness="obj.freshness">
    </slot>
  </div>
</template>
<script setup lang="ts">
import { reactive } from "@vue/reactivity";
const obj = reactive({name:'桃子',freshness:5})

const setName = (name:string)=>{
  obj.name = name
}
/**
 * 要对父组件暴露的方法和属性必须都写到defineExpose中,不然获取不到
 */
defineExpose({obj,setName})
</script>
<style lang='scss' scoped>
</style>

父组件:

<template>
<div>
  <navList ref="navlistRef"> 
    <!-- #fruits相当于v-slot:fruits等号后面的东西相当于vue2的slot-scope -->
    <template #fruits="obj">我是水果1号,{{JSON.stringify(obj)}}</template> 
  </navList>
  <button @click="navlistChange">改你的水果一号</button>
  {{num.name}}
</div>
</template>

<script setup lang="ts">
import { ref,toRefs} from 'vue';
import navList from './components/NavList.vue'
/**
 * ref的写法是给原对象创建了一个副本(拷贝),修改后不会影响原对象的值,但是对象类型的做了ref操作后会简历reactive的响应式,这时候更改了ref的对象的属性值会影响原对象。ref会让UI从新渲染
 */
const navlistRef = ref<{obj:{name:string,freshness:number},setName:Function}|null>()
/**
 * torefs的写法修改后会影响原对象,因为是引用的之前的对象的地址,但是这是响应式的,修改后UI不变
 */
let num = toRefs({name:'zs',sex:14})
var resource = {other:{sex:1},address:'大道西侧'}
const info =  toRefs(resource)
var resource1 = {name:'zds'}
const info1 =  ref(resource1.name)
const navlistChange=()=>{
  //子组件的属性依然不可以去修改
  navlistRef.value?.obj?.name;
  num.name.value='12'
  //但是可以通过调用子组件的方法修改子组件的属性
  navlistRef.value?.setName('葡萄')

  info.other.value.sex=2
  info.address.value="大道东侧"
  console.log(resource,resource1)
  info1.value='lsd'
  debugger
}
</script>
<style lang='scss' scoped>
</style>

免责声明:文章转载自《vue3的一些基本常识(slot,ref)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇掌握VS2010调试 -- 入门指南使用Qt实现MDI风格的主窗体下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

windows server2012 nVME和网卡等驱动和不识别RAID10问题

安装2012--不识别M.2nVME,下载官方驱动程序,并将其注入没有多个驱动程序的系统--添加ITSK通用驱动程序:|Win8012R2.x64网卡驱动程序无法打开--提取官方驱动程序EXE文件以添加网卡驱动程序不识别SATARAID10--超过2T,最大Legacy为2T。...

目录扫描工具DirBuster

DirBuster用于检测web服务器上的目录和隐藏文件。因此,必须在运行之前安装Java环境。在TargetURL下输入要检测的网站的地址。请注意,地址应与协议一起添加。一种是自动选择。它将决定是使用head方法还是get方法。number of Thread是所选扫描线程的数量,selectscanning type是所选的扫描类型。Listbasedb...

c++ 发送消息,模拟拖拽文件

=NULL)28{29LPSTRpszRemote=VirtualAllocEx;30if31{32::SendMessage;33bResult=TRUE;34}35}36}3738if39{40delete[]pBuf;41pBuf=NULL;42}43 returnbResult;44}在调用此函数之前,首先打开接受拖动的进程ShellExecute;...

【Mybatis-Plus】使用updateById()、update()将字段更新为null或者空

我检查了以下项目的配置,发现字段级别设置为NOT_由空引起。2不为空,但默认更新策略为Not_ NULL:解决方案1。设置全局字段策略加:classpath:#字段策略IGNORED:NOT_NULL:NOT_EMPTY:NOT_Null2。为所需字段设置单独的字段策略很麻烦。...

Makefile 使用总结

1.Makefile简介Makefile是和make命令一起配合使用的.很多大型项目的编译都是通过Makefile来组织的,如果没有Makefile,那很多项目中各种库和代码之间的依赖关系不知会多复杂.Makefile的组织流程的能力如此之强,不仅可以用来编译项目,还可以用来组织我们平时的一些日常操作.这个需要大家发挥自己的想象力.本篇博客是基于{精华}跟我...

关于异常STATUS_IN_PAGE_ERROR(0xC0000006)

表示0x%p处的指令引用了位于0x%p的内存。由于0x%x的I/O错误状态,未将所需数据放入内存。设备如果读取出错,驱动程序可以返回此异常。其定义如下:////MessageId:STATUS_IN_PAGE_ERROR////MessageText:////Theinstructionat0x%preferencedmemoryat0x%p.Therequ...