Vue3中ref的使用

引言

使用ElForm进行表单的验证时,之前在vue2中,则是采用的是this.$refs['form'].validate,但是在vue3 的setup中是没有办法直接使用this,如何进行解决?

使用ref变量

 <el-form
        ref="formRef"
        :model="form"
        :rules="rules"
        label-position="center"
        size="small"
        label-width="100px"
      >
     ...
</el-form>

setup(){
   const formRef = ref(null);
   const save = () => {
        (formRef.value as any)?.validate((valid) => {
          if (valid) {
             console.log('验证通过')
          }
        });
      };
  return {
     formRef,
     save
  }
}

需要注意的是,ref前面是没有:,而ref是一个变量的,这个是有些反直觉的。

使用 getCurrentInstance

  import {  getCurrentInstance } from 'vue';
  setup(){
     const instance = getCurrentInstance()
     const save = () => {
        (instance?.refs['formRef'] as any)?.validate((valid) => {
          if (valid) {
             console.log('验证通过')
          }
        });
     }
  }

需要注意的是 getCurrentInstance是有使用的限制的,如果是直接在方法中书写是直接拿不到值的,比如下面这种写法,直接放在了save方法中,是不行的

 import {  getCurrentInstance } from 'vue';
  setup(){
     
     const save = () => {
        const instance = getCurrentInstance() // 获取不到当前上下文 
        (instance?.refs['formRef'] as any)?.validate((valid) => {
          if (valid) {
             console.log('验证通过')
          }
        });
     }
  }

总结

在vue3的setup中可以使用ref变量的方式或者getCurrentInstance两种方式来使用Ref,从使用方便的程度上来看,更加推荐使用ref变量的方式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容