当前位置:首页 > VUE

vue ref实现

2026-03-27 19:33:29VUE

Vue 中使用 ref 实现

在 Vue 中,ref 是一种用于获取 DOM 元素或组件实例引用的方法。它可以在模板中直接使用,也可以在组合式 API 中使用。

在模板中使用 ref

在模板中,可以通过 ref 属性标记一个 DOM 元素或子组件,随后在组件实例中通过 this.$refs 访问。

<template>
  <div>
    <input ref="inputRef" type="text" />
    <button @click="focusInput">Focus Input</button>
  </div>
</template>

<script>
export default {
  methods: {
    focusInput() {
      this.$refs.inputRef.focus();
    }
  }
};
</script>

在组合式 API 中使用 ref

在 Vue 3 的组合式 API 中,ref 不仅可以用于模板引用,还可以用于创建响应式数据。

vue ref实现

<template>
  <div>
    <input ref="inputRef" type="text" />
    <button @click="focusInput">Focus Input</button>
  </div>
</template>

<script>
import { ref, onMounted } from 'vue';

export default {
  setup() {
    const inputRef = ref(null);

    onMounted(() => {
      console.log(inputRef.value); // 获取 DOM 元素
    });

    const focusInput = () => {
      inputRef.value.focus();
    };

    return {
      inputRef,
      focusInput
    };
  }
};
</script>

使用 ref 创建响应式数据

ref 还可以用于创建响应式的基本类型数据(如字符串、数字等)。

<template>
  <div>
    <p>{{ count }}</p>
    <button @click="increment">Increment</button>
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const count = ref(0);

    const increment = () => {
      count.value++;
    };

    return {
      count,
      increment
    };
  }
};
</script>

ref 与 reactive 的区别

  • ref 用于包装基本类型数据(如数字、字符串),通过 .value 访问。
  • reactive 用于包装对象或数组,可以直接访问属性。
import { ref, reactive } from 'vue';

const count = ref(0); // 访问 count.value
const state = reactive({ count: 0 }); // 直接访问 state.count

在子组件中使用 ref

通过 ref 可以获取子组件的实例,调用其方法或访问其数据。

vue ref实现

<template>
  <ChildComponent ref="childRef" />
  <button @click="callChildMethod">Call Child Method</button>
</template>

<script>
import { ref } from 'vue';
import ChildComponent from './ChildComponent.vue';

export default {
  components: { ChildComponent },
  setup() {
    const childRef = ref(null);

    const callChildMethod = () => {
      childRef.value.someMethod();
    };

    return {
      childRef,
      callChildMethod
    };
  }
};
</script>

动态 ref

可以通过动态绑定 ref 来灵活地引用多个元素。

<template>
  <div v-for="item in items" :key="item.id" :ref="setItemRef">
    {{ item.text }}
  </div>
</template>

<script>
import { ref, onMounted } from 'vue';

export default {
  setup() {
    const items = ref([{ id: 1, text: 'Item 1' }, { id: 2, text: 'Item 2' }]);
    const itemRefs = ref([]);

    const setItemRef = (el) => {
      if (el) {
        itemRefs.value.push(el);
      }
    };

    onMounted(() => {
      console.log(itemRefs.value); // 所有动态引用的 DOM 元素
    });

    return {
      items,
      setItemRef
    };
  }
};
</script>

总结

ref 在 Vue 中有多种用途:

  • 获取 DOM 元素或组件实例。
  • 创建响应式数据(基本类型)。
  • 动态绑定多个引用。

通过合理使用 ref,可以更灵活地操作 DOM 或组件实例。

标签: vueref
分享给朋友:

相关文章

vue实现网页切换

vue实现网页切换

Vue 实现网页切换的方法 在 Vue 中实现网页切换通常可以通过以下几种方式完成,具体取决于项目需求和路由管理方式。 使用 Vue Router Vue Router 是 Vue.js 官方提供的…

vue实现login

vue实现login

Vue 实现登录功能 在 Vue 中实现登录功能通常需要以下几个步骤: 创建登录表单组件 在 Vue 项目中创建一个登录表单组件,包含用户名和密码输入框以及提交按钮。可以使用 Vue 的模板语法和双…

vue 实现折叠

vue 实现折叠

Vue 实现折叠功能的方法 在 Vue 中实现折叠功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 v-if 或 v-show 控制显示隐藏 通过绑定一个布尔值变量,结合 v-if 或 v…

vue实现computed

vue实现computed

Vue 中 computed 的实现原理 computed 属性是 Vue 的一个核心特性,它基于响应式依赖进行缓存,仅在依赖发生变化时重新计算。以下是 computed 的实现方式: 基本用法 在…

vue实现文章滚动

vue实现文章滚动

Vue 实现文章滚动效果 使用 CSS 实现基础滚动 通过 CSS 的 overflow 和 height 属性控制滚动区域,适用于静态内容滚动。在 Vue 模板中定义固定高度的容器,内容超出后自动滚…

vue实现组件跟随

vue实现组件跟随

实现组件跟随的常见方法 使用CSS定位 通过CSS的position: fixed或position: absolute属性实现组件跟随。需要结合JavaScript计算目标元素的位置。 &…