Subscribe on changes!

Setup sugar cannot pass the ref object to the ref function param.But I can get the ref object correctly with no sugar

avatar
Apr 8th 2021

Version

3.0.11

Reproduction link

link

Steps to reproduce

  1. Use Setup sugar in the children component.and set the ref equals dom to the root element.
  2. Const a ref variable named dom.
  3. Use ref function in the parent component, and then you cannot get the ref obejct in the ref function's first param.

What is expected?

using Setup sugar in the children component and set the ref attr to the root element won't cause ref function's first param missing in the parent component.

What is actually happening?

Sugar.vue is the children component of the App.vue. When I use ref sugar in the Sugar.vue, I cannot get the ref object in the setRef's first param. It's an empty object. But with no sugar in the NoSugar.vue, I can get the ref object correctly in the setRef's first param. App.vue

<template>
  <sugar :ref="setRef" />
  <no-sugar :ref="setRef" />
</template>
<script lang="ts">
export default {
  setup() {
    const setRef = el => {
      // el is an empty object
    };
    
    const setRefNoSugar = el => {
      // el is correct
    };
    return { setRef, setRefNoSugar };
  }
};
</script>

it works

<script lang="ts">
import { ref, onMounted } from 'vue';
export default {
  setup() {
    const dom = ref();
    return { dom };
  },
};
</script>

it does not work

<script lang="ts" setup>
import { ref } from 'vue';
const dom = ref();
</script>

Here is my repo.

avatar
Apr 9th 2021

Currently this is expected, <script setup> is closed by default, see https://github.com/vuejs/rfcs/blob/script-setup-2/active-rfcs/0000-script-setup.md#closed-by-default. But the RFC about the expose is still under discussion https://github.com/vuejs/rfcs/pull/210. I tried to give a workaround, but the result was much messier than I thought.

avatar
Apr 9th 2021

I've already known what the exact problem is. Thanks.

avatar
Apr 10th 2021

Closing as expected behavior.