2

I'm learning javascript and vue.js 3 composition API. My question is I simply want to get an array length and render at

. The array name : "getForms"

<script>.....
const forms_length = computed(() =>  getForms.value.length)

<template>....
<p> {{form_length}} </p>

I get an error "Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'length')"

why? and what I should do?

Thank you for your help!

4
  • could you show us where getForms is Commented May 19, 2022 at 17:57
  • 1
    Thank you Ifaruki! It's coming from pinia, import {useFormsStore} from '../store/forms' and const getForms = computed(() => { return store.forms}) if I create an array like const getForm = computed(() => [ {id: 1, name: "aaa" }, { id: 2, name: "bbb"}, { id: 1, name: "ccc" }, {id: 1, name: "ddd" }, ]) it works.... Commented May 19, 2022 at 18:38
  • The question should contain all the relevant code. You're still missing the line that defines store. Even if it's correct, it's specific to what store.forms is. The error means that store.forms is possibly undefined, or it could refer to another array. The error mentions a promise, but there's no promise in the code. Please, provide stackoverflow.com/help/mcve that can reproduce the problem. Commented May 19, 2022 at 18:42
  • Sorry Estus Flask, This is first time I've posted, actually created my account. I'll be careful next time. Thanks Commented May 19, 2022 at 20:46

1 Answer 1

3

You should use the computed property this way

<template>
  <p>Array length: {{ formsLength}}</p>
</template>
<script>
  import { computed } from 'vue'
  import {useFormsStore} from '../store/forms'
  setup() {
    const { store } = useFormsStore()
    // if the store.forms array is undefined or not ready,
    // then it returns an empty array
    const getForms = computed(() => { return store.forms || []})
    const formsLength = computed(() => getForms.value.length)

    return {
      formsLength
    }
  }
</script>
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.