Vue3-组件高级

本文详细介绍了Vue3中组件的高级特性,包括watch侦听器的使用,如基本语法、immediate和deep选项,以及组件的生命周期,如created、mounted、updated等关键阶段。此外,还探讨了组件间的数据共享策略,包括父子、兄弟及后代组件间的数据传递,以及Vuex在大型项目中的作用。最后,讲解了在Vue3.x中如何全局配置axios,解决请求路径重复和代码冗余的问题。
摘要由CSDN通过智能技术生成

一. watch 侦听器

 1. 何为 watch 侦听器

    watch 侦听器允许开发者监视数据的变化,从而针对数据的变化做特定的操作。例如,监视用户名的变化并发 起请求,判断用户名是否可用。 

2. 侦听器的基本语法 

    开发者需要在 watch 节点下,定义自己的侦听器。实例代码如下:

export default {
  data() {
    return { username: '' }
},
watch: {
  // 形参列表中 第一个值为“变化之后得到的新值” 第二个值为“变化前的旧值”
  username(newVal, oldVal) {
    console.log(newVal, oldVal)
    },
  },
}

 3. 使用 watch 检测用户名是否可用

    监听 username 值的变化,并使用 axios 发起 Ajax 请求,检测当前输入的用户名是否可用,示例代码如下:

import axios from 'axios'
export default {
  data() {
    return { username: '' }
},
watch: {
  async username(newVal, oldVal) {
    const { data: res } = await axios.get('https://www.escook.cn/api/finduser/${newVal}')
    console.log(res)
    },
  },
}

4. immediate 选项

    默认情况下,组件在初次加载完毕后不会调用 watch 侦听器。如果想让 watch 侦听器立即被调用,则需要使用 immediate 选项。示例代码如下:

watch: {
  // 1. 监听 username 值的变化
  username: {
    // 2. handler 属性是固定写法:当 username 变化时,调用 handler
    async handler(newVal, oldVal) {
      const { data: res } = await axios.get('https://www.escook.cn/api/finduser/${newVal}')
      console.log(res)
    },
    // 3. 表示组件加载完毕后立即调用一次当前的 watch 侦听器
    immediate: true
  },
}

5. deep 选项

    当 watch 侦听的是一个对象,如果对象中的属性值发生了变化,则无法被监听到。此时需要使用 deep 选项, 代码示例如下:

  data() {
    return { 
      info: { username: 'admin' },
  }
},
watch: {
  info: {
  async handler(newVal, oldVal) {
    const { data: res } = await axios.get('https://www.escook.cn/api/finduser/${newVal.username}&
Vue3.0中的组件高级功能包括保持动态组件状态和引用DOM元素。 保持动态组件状态的方法是使用Vue内置的<keep-alive>组件。通过将动态组件包裹在<keep-alive>标签中,可以在切换动态组件时保持组件的状态。例如: ```html <keep-alive> <component :is="comName"></component> </keep-alive> ``` 在这个例子中,comName是一个data属性,用于指定当前要渲染的组件的名称。通过在<component>标签中使用:is属性,可以动态地指定要渲染的组件。 引用DOM元素的方法是使用ref属性。通过给DOM元素添加ref属性,可以在组件中通过$refs属性获取对DOM元素的引用。例如: ```html <template> <h3>MyRef组件</h3> <button @click="getRef">获取$refs引用</button> </template> <script> export default { methods: { getRef() { console.log(this.$refs) // $refs指向一个空对象,需要在DOM元素上添加ref属性 } } } </script> ``` 在这个例子中,点击按钮后,调用getRef方法可以在控制台上输出当前组件实例对象this。通过this.$refs可以访问到DOM元素的引用。 以上就是Vue3.0中组件高级功能的两个示例,分别是保持动态组件状态和引用DOM元素。希望能对你有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Vue3.0----组件高级【下】(第五章)](https://blog.csdn.net/QQ675396947/article/details/127486948)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fusheng_cn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值