Vue3 setup 语法糖中一些常用操作

生命周期

<script lang="ts" setup>
import { onMounted, onUpdated, onUnmounted } from 'vue'
	onMounted(()=> {
	
	})
	onUpdated(()=> {
	
	})
	onUnmounted(()=> {
	    
	})
</script>

函数式编程都需要先引入在使用,生命周期对比如下

	/**
	beforeCreate -> use setup()
	created -> use setup()
	beforeMount -> onBeforeMount
	mounted -> onMounted
	beforeUpdate -> onBeforeUpdate
	updated -> onUpdated
	beforeDestroy -> onBeforeUnmount
	destroyed -> onUnmounted
	errorCaptured -> onErrorCaptured
	*/
	onBeforeMount(() => {
    })
    onMounted(() => {
    })
    onBeforeUpdate(() => {
    })
    onUpdated(() => {
    })
    onBeforeUnmount(() => {
    })
    onUnmounted(() => {
    })
    onActivated(() => {
    })
    onDeactivated(() => {
    })
    onErrorCaptured(() => {
    })

获取dom节点

<template>
<div ref="divDom"></div>
</template>
<script lang="ts" setup>
import { onMounted, ref } from "vue";
const divDom = ref<HTMLElement|null>(null)
onMounted(()=> {
console.log(divDom.value) //获取dom节点
})
</script>

双向绑定

<template>
<div>
    {{msg}}
    {{data.name}}
</div>
</template>
<script lang="ts" setup>
import { ref,reactive } from 'vue';
const msg = ref<string>('双向绑定')
const data = reactive<any>({ //数据集合 可以是任意组合
    name: '张三',
    age: 10
})
</script>

组件传值

  • 子组件接受参数用defineProps语法糖
const props = defineProps({
  option: Object,
  id: {
    type: String,
    default: "echart-box",
  }
});

Watch

1、

父组件与子组件通信

  • 父组件调用子组件方法
//父组件
<template>
    <ComponentA ref="refA"/>
</template>
<script lang="ts" setup>
import ComponentA from '@/components/component.vue'
import { ref, onMounted } from 'vue'
const comA = ref<InstanceType<typeof ComponentA>>()
onMounted(()=> {
   ComponentA .value?.initBideo()
})
</script>
//子组件
<template>
    子组件
</template>
<script lang="ts" setup>
const initBideo = () => {
	console.log('子组件方法')
}
defineExpose({
  //将子组件属性暴露出去
  initBideo
});
</script>
  • provide && inject
//父组件中
//父组件传递响应属性
provide('info', obj)
//子组件里接收响应属性
inject('info')
  • context形参
    setup函数的第二个形参是一个上下文对象,就是vue2.x中的this,在vue 3.x中,它们的访问方式如下
setup(props, context) {
  context.slots
       context.emit
       context.refs
   }
import { onMounted, useSlots, useAttrs } from "vue";
const slots = useSlots()
console.log(slots) //插槽
const attrs = useAttrs()
console.log(attrs)//属性
  • computed
    计算属性 可创建只读,和可读可写两种
    computed() 用来创建计算属性,computed() 函数的返回值是一个 ref 的实例
onst count = ref(1)
const doblueCount = computed(() => count.value * 2)
// console.log(doblueCount.value) // 打印 2
// doblueCount.value++ //报错
// 创建可读可写的计算属性
// 在调用computed()函数的时候传入一个包含get和set的对象,就可以得到一个可读可写的计算属性了。
// 创建一个响应式数据
// 根据count的值创建一个响应式的计算属性, 它会根据ref自动计算并且返回一个新的ref
const computedCount = computed({ //创建可修改的computed属性
    get: () => count.value + 1,
    set: (val) => count.value = val - 1
})
computedCount.value = 6
console.log(computedCount.value, count.value)
setTimeout(() => {
    count.value = 15
    console.log(computedCount.value, count.value)
}, 1000)

//后续更新

### 如何在 Vue 3 Setup 语法糖中使用 `uni-popup` 组件 为了在 Vue 3setup 语法糖环境中成功集成并使用 `uni-popup` 组件,可以遵循如下方法: #### 导入必要的模块和定义属性 首先,在脚本部分导入所需的依赖项,并声明响应式的变量以及函数来管理弹窗的状态。 ```javascript <script setup> import { ref } from &#39;vue&#39;; import UniPopup from &#39;@dcloudio/uni-ui/lib/uni-popup/uni-popup.vue&#39;; // 假设这是正确的路径[^1] const popupVisible = ref(false); function openSpecs() { popupVisible.value = true; } </script> ``` #### 使用模板标签创建界面结构 接着,在 `<template>` 中构建页面布局。通过绑定 `v-model` 到之前定义好的布尔型状态变量上实现双向数据流控制,从而达到显示或隐藏弹出框的效果;同时利用内联样式调整容器大小等外观特性。 ```html <template> <!-- 定义一个按钮,用于打开弹出层 --> <view style="width: 200px"> <button @click="openSpecs">弹出</button> </view> <!-- 弹出层视图 --> <view :style="{ maxWidth: &#39;80%&#39; }"> <UniPopup v-model:visible="popupVisible" background-color="red" type="center"> <SelectSpecs></SelectSpecs> </UniPopup> </view> </template> ``` 请注意,上述代码片段中的 `background-color` 和其他自定义样式的设置方式可能因实际使用的框架版本而有所不同。如果遇到样式无法生效的情况,则考虑采用额外包裹一层 `<view>` 或者直接修改组件内部 CSS 类的方式解决这个问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值