0

Here is my code:

<ul>
  <li v-for="value in RandomTopic" :key="value.id">{{ value.title }}</li>
</ul>
export default {
  data() {
    return {
      RandomTopic: null
    }
  },
  mounted() {
     ///some method to get data from remote server
     console.log(res.data);
     this.RandomTopic = res.data;
  }
}

I want to render all the data from the remote server in front end. However, after the program ran, it reports this error:

Cannot set property 'RandomTopic' of undefined ; at api request success callback function
TypeError: Cannot set property 'RandomTopic' of undefined

The console.log(res.data); log the JSON successfully so it seems not the problem of AJAX or remote server.

And also, here is a sample of the JSON:

[
    {
        "id": 421,
        "title": "sample1",
        "image_url": "bus.png"
    },
    {
        "id": 535,
        "title": "sample78",
        "image_url": "car.png"
    }
]

What's wrong with my code ? I am a beginner of Vue 3, please help me.

Debug Diva
  • 26,058
  • 13
  • 70
  • 123
Melon NG
  • 2,568
  • 6
  • 27
  • 52
  • The question lacks https://stackoverflow.com/help/mcve . The error can't be produced by this code. – Estus Flask Jun 13 '22 at 13:51
  • A likely cause for such error is that a callback was used the wrong way in the part that was omitted, https://stackoverflow.com/questions/20279484/how-to-access-the-correct-this-inside-a-callback – Estus Flask Jun 13 '22 at 13:52

1 Answers1

1

As per the error you mentioned, Issue is basically related to the scope of this. Looks like you are using regular function instead of arrow function ( => {...}) which don't provide their own this binding (it retains this value of the enclosing lexical context).

Reference - Arrow function

.then(res => {
    this.RandomTopic = res.data;
})
Debug Diva
  • 26,058
  • 13
  • 70
  • 123