Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Vue3 setup returned value can't be found in the rest of that component

It says "anything returned here will be available for the rest of the component"(https://v3.vuejs.org/guide/composition-api-introduction.html#setup-component-option), but I got this error on c which is a variable returned in setup: Cannot find name 'c'.ts(2304).

<script lang="ts">
import { defineComponent } from 'vue'
export default defineComponent({
  setup(props) {
    let c = 123;
    return { c }
  },
  methods: {
    increment() {
      c;
    }
  }
})
</script>

Any help?

like image 969
HKK Avatar asked Sep 05 '25 03:09

HKK


1 Answers

You need to access the variables exposed via setup method using this keyword in your methods.

Warning:

But this is just a bad way to proceed because you are mixing composition api with options api. Refer to this thread to understand the difference between the two.

Vue.createApp({
  setup(props) {
    let c = 123;
    return { c }
  },
  methods: {
    increment() {
      console.log(this.c);
    }
  }
}).mount('#app')
<script src="https://unpkg.com/vue@next"></script>
<div id="app">
  <button @click="increment">Increment</button>
</div>
Correct way achieving it using Composition API:

Vue.createApp({
  setup(props) {
    const c = Vue.ref(123);
    const increment = () => c.value++;

    return {
      c,
      increment
    }
  },
}).mount('#app')
<script src="https://unpkg.com/vue@next"></script>
<div id="app">
  <span>{{ c }}</span><br/><br/>
  <button @click="increment">Increment</button>
</div>
like image 176
Salvino D'sa Avatar answered Sep 07 '25 21:09

Salvino D'sa