一 概述
- 文本框和按钮按需展示功能实现
- 了解this.$nextTick的应用场景
- updated为啥不行
二 文本框和按钮按需展示功能实现
2.1 布局文件
<template>
  <div class="app-container">
    <input type="text" v-if="inputVisible" @blur="showButton">
    <button v-else @click="showInput">展示输入框</button>
  </div>
</template>
2.2 逻辑文件
export default {
  methods:{
    showInput(){
      this.inputVisible=true
    },
    showButton(){
      this.inputVisible=false
    }
  },
  data() {
    return {
      //控制输入框和按钮的按需切换;
      //默认值为false,表示默认展示按钮,隐藏输入框
      inputVisible: false
    }
  },
}
2.3 效果图

三 了解this.$nextTick的应用场景
3.1 当文本框显示时,自动获取焦点
布局文件(给input添加ref属性)
<input type="text" v-if="inputVisible" @blur="showButton" ref="iptRef">
<button v-else @click="showInput">展示输入框</button>
代码文件(input添加focus方法)
showInput(){
    //1.切换布尔值,把文本框显示出来
     this.inputVisible=true
     //2.让展示出来的文本框,自动获取焦点
     this.$refs.iptRef.focus()
 },
结果
vue.runtime.esm.js?c320:4605 [Vue warn]: Error in v-on handler: "TypeError: Cannot read properties of undefined (reading 'focus')"
found in
---> <App> at src/App.vue
       <Root>
vue.runtime.esm.js?c320:3049 TypeError: Cannot read properties of undefined (reading 'focus')
    at VueComponent.showInput (App.vue?11c4:41:1)
    at invokeWithErrorHandling (vue.runtime.esm.js?c320:3017:1)
    at HTMLButtonElement.invoker (vue.runtime.esm.js?c320:1815:1)
    at original_1._wrapper (vue.runtime.esm.js?c320:7473:1)
原因:
iptRef为空,导致focus方法出错
3.2 this.$nextTick(cb) 方法
组件的 $nextTick(cb) 方法,会把 cb 回调推迟到下一个 DOM 更新周期之后执行。通俗的理解是:等组件的
 DOM 更新完成之后,再执行 cb 回调函数。从而能保证 cb 回调函数可以操作到最新的 DOM 元素
3.3 使用this.$nextTick(cb) 方法修改后
代码
showInput(){
      //1.切换布尔值,把文本框显示出来
      this.inputVisible=true
      //2.让展示出来的文本框,自动获取焦点
      this.$nextTick(()=>{
        this.$refs.iptRef.focus()
      })
    }
四 updated为啥不行
4.1 updated修改
updated(){
    this.$refs.iptRef.focus()
  },
4.2 现象
创建时正常,销毁时出错,错误现象如下:
vue.runtime.esm.js?c320:4605 [Vue warn]: Error in updated hook: "TypeError: Cannot read properties of undefined (reading 'focus')"
found in
---> <App> at src/App.vue
4.3 原因
- 第一次(创建时),input展示获取焦点—正常
- 第二次(销毁时),input不展示,又获取焦点—失败



















![[oeasy]python0096_游戏娱乐行业_雅达利_米洛华_四人赛马_影视结合游戏](https://img-blog.csdnimg.cn/img_convert/73afe531d2b0c2da2264633bb1c89189.png)