Vue笔记-Setup

文章详细介绍了Vue组件中setup函数的使用,包括如何通过ref和reactive创建响应式数据,props和context的交互,以及expose在暴露子组件属性给父组件中的作用。同时,讨论了data和setup中相同数据的优先级问题,以及在使用渲染函数h时如何通过expose暴露数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Setup

Vue官方文档:https://cn.vuejs.org/guide/extras/composition-api-faq.html

setup()

基础使用:在setup中通过ref和reactive创建响应式数据

<script>
import { ref, reactive } from 'vue'

export default {
  setup() {
    const msg = ref('hello world')
    const obj = reactive({
      name: '高启强',
      age: 43
    })
    return {
      msg,
      obj
    }
  }
}
</script>

<template>
  <div>
    {{ msg }}
    <p>我是{{ obj.name }}</p>
  </div>
</template>

Props和context

props就是父组件传入的属性;context是上下文对象,里面有attrs,slots,emit,expose

父组件

<template>
  <Child :name='obj.name' />
</template>

子组件

export default {
  props: ['name'],
  setup(props, context) {
    console.log('我是' + props.name);
    console.log(context.attrs)
    console.log(context.emit)
    console.log(context.slots)
    console.log(context.expose)
  }
}

context中的expose是做什么的?

expose官方称为:暴露公共属性,就是用来暴露给父组件的属性用的,暴露出去的属性在父组件可以访问到,没有暴露的属性获取不到,会是undefined。

子组件:在子组件中有name和age两个数据,只暴露出name数据

<script>
export default {
  props: ['name'],
  setup(props, { attrs, emit, slots, expose }) {
    const name = '张三'
    const age = 18
		// 只暴露出name,外面的组件只能获取到name,age就获取不到
    expose({
      name: name
    })
    
    return {
      name,
      age
    }
  }
}
</script>

父组件:父组件获取到name,获取不到age

<script>
import Child from '@/components/Child.vue'

export default {
  components: { Child },
  mounted() {
    // 可以获取到name,获取不到age
    console.log(this.$refs.child.name);  // 张三
    console.log(this.$refs.child.age);   // undefined
  },
}
</script>

<template>
  <div>
    <Child ref='child' />
  </div>
</template>

data和setup中有相同的数据时会用哪个?

当data中有一个name,setup中也有一个name时,会用哪个呢?答案是setup, 当有相同名称的数据时候setup中的会代替data中的,也就是setup比data优先级高

<script>
import { ref } from 'vue'
export default {
  data() {
    return {
      name: '高启兰',
    }
  },
  setup() {
    const name = ref('高启强')

    return {
      name
    }
  },
  created() {
    console.log(this.name);
  }
}
</script>

使用渲染函数h

在setup中一般是返回一个json对象,里面是data数据。但是setup也可以返回一个渲染函数。

因为返回的是渲染函数,渲染函数只是渲染当前是组件内容,没有返回其他数据。所以返回函数的话数据就只能在组件内部使用,不能在组件外部访问,因为没有return数据。

那怎么办呢?对了,可以使用expose将数据暴露出去就可以了

<script>
import { h, ref } from 'vue'

export default {
  setup(props, { expose }) {
    const count = ref(0)
    
		// 此时父组件可以通过模板引用来访问这个 count 数据了。
    expose({
      count
    })

    return () => h('div', count.value)
  }
}
</script>
### 关于 Vue3 学习笔记教程 Vue 是一个流行的前端框架,用于构建交互式的用户界面。以下是有关 Vue3 的学习资源以及如何设置开发环境的相关信息。 #### 1. 安装 Vue CLI 并创建 Vue3 项目 为了快速上手 Vue3,可以使用官方推荐的工具 `vue-cli` 来初始化一个新的项目。安装 Vue CLI 需要 Node.js npm 支持。运行以下命令来全局安装 Vue CLI: ```bash npm install -g @vue/cli ``` 接着可以通过以下命令创建新的 Vue3 项目[^1]: ```bash vue create my-vue3-project ``` 在创建过程中可以选择 Vue3 版本作为默认选项。 --- #### 2. 使用 CDN 方式引入 Vue3 进行初步体验 如果不想立即配置本地开发环境,可以直接通过 HTML 文件中的 `<script>` 标签加载 Vue3 的 CDN 资源来进行简单的实验。例如,在 HTML 中加入以下代码即可开始编写第一个 Vue 应用程序[^2]: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Vue3 Example</title> <!-- 引入 Vue3 --> <script src="https://unpkg.com/vue@next"></script> </head> <body> <div id="app">{{ message }}</div> <script> const app = { data() { return { message: &#39;Hello, Vue3!&#39; } } } Vue.createApp(app).mount(&#39;#app&#39;) </script> </body> </html> ``` 上述代码展示了如何利用 Vue3 实现数据绑定功能。 --- #### 3. 组件间通信:v-model 在 Vue3 中的应用 对于更复杂的场景,比如父子组件之间的双向数据绑定,Vue3 提供了增强版的 `v-model` 功能。下面是一个典型的例子,展示父组件向子组件传递值并接收更新的过程[^3]: **父组件** ```javascript <script setup> import MyInput from &#39;./components/MyInput.vue&#39; import { ref } from &#39;vue&#39; const txt = ref(&#39;初始文本&#39;) </script> <template> <MyInput v-model="txt" /> <p>{{ txt }}</p> </template> ``` **子组件 (MyInput.vue)** ```javascript <script setup> defineProps([&#39;modelValue&#39;]) defineEmits([&#39;update:modelValue&#39;]) </script> <template> <input :value="modelValue" @input="$emit(&#39;update:modelValue&#39;, $event.target.value)" /> </template> ``` 此示例说明了 Vue3 如何支持自定义事件名称前缀(如 `update:`),从而实现更加灵活的数据同步机制。 --- #### 4. 推荐的学习资料 除了以上提到的内容外,还有许多优秀的在线课程可以帮助深入理解 Vue3 技术栈。其中包括但不限于以下几个方面: - **尚硅谷 Vue2.0+Vue3.0 全套教程**: 结合实际案例讲解核心概念技术要点。 - **黑马程序员 Vue3 学习笔记**: 主要针对初学者设计,适合零基础入门者阅读。 - **官方文档**: https://v3.vuejs.org/guide/introduction.html —— 最权威且详尽的技术指南。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值