【问题标题】:How to get random data from API如何从 API 获取随机数据
【发布时间】:2022-01-07 03:36:03
【问题描述】:

我正在尝试从通过 vuejs 中的 api 获得的数据中获取随机 id。然后我正在尝试创建这样的代码。

data() {
   return {
     mostPlayed: [],
     randomData: [],
   }
},
created() {
   this.randomData = this.randomItem(this.mostPlayed);
},
methods: {
   async getMostPlayed() {
      try {
        const response = await axios.get(url);
        const data = response.data.slice(0, 9);
        this.mostPlayed = data;
      } catch (error) {
        console.log(error);
      },
   randomItem (items) {
      return items[Math.floor(Math.random() * items.length)];
    }
},
mounted() {
   this.getMostPlayed();
}

样本数据

[ 
 {
   id: 1
   title: "Forza Horizon 5"
 },
 {
   id: 2
   title: "Apex Legends"
 },
 {
   id: 3
   title: "Battlefield 2042"
 },
 {
   id: 4
   title: "Fortnite"
 },
 {
   id: 5
   title: "Genshin Impact"
 },
]

但是什么也没发生。我想用这样的样本数据获得随机 id。像这样的示例输出。 [ { id: 3 }, { id: 1 }, { id: 5 } ]。

【问题讨论】:

  • 使用console.log检查接收数据是否正确?
  • 调用created生命周期时数据可能尚未加载。
  • @sajjad 结果 console.log 未定义
  • @Kokodoko 嗯好的,那我该怎么办?
  • @BlekWit 请检查我发布的答案。那将解决问题。如果您仍然遇到任何问题,请告诉我

标签: javascript vue.js vuejs2


【解决方案1】:

您正在调用 mount 中的 API 调用方法,并从创建的播放次数最多的列表中生成随机列表。但是根据here给出的vue生命周期图,你可以看到created hook先出现,然后mounted hook。这样你就可以在一个空的最常播放的数组上创建随机列表。

作为解决方案,在 API 响应后调用内部创建的getMostPlayed 方法和getMostPlayed 内部的randomItem 方法。

类似这样的:

data() {
    return {
        mostPlayed: [],
        randomData: [],
    }
},
created() {
    this.getMostPlayed();
},
methods: {
    async getMostPlayed() {
         try {
             const response = await axios.get(url);
             const data = response.data.slice(0, 9);
             this.mostPlayed = data;
             this.randomData = this.randomItem(this.mostPlayed);
         } catch (error) {
             console.log(error);
         },
    randomItem (items) {
         return items[Math.floor(Math.random() * items.length)];
     }
}

如果您想拥有多个随机元素,请参阅此问题的答案,因为当前逻辑是从数组中获取单个随机元素:Get multiple random elements from array

【讨论】:

  • 好的,我试试这段代码,然后收到一条新消息。据说“[vue-router] 缺少命名路由“GameDetail”的参数:需要定义“id””。但是我尝试console.log(this.randomData),只出现一个数据。
  • randomItem 方法中编写的逻辑总是返回单个元素,这就是我的想法。考虑在此处检查该逻辑。 stackoverflow.com/questions/4550505/…
  • hmm ok,但是能不能以数组的形式返回很多随机数据?
  • @BlekWit 我已经用类似问题的链接更新了我的答案。我认为你问的是一个完全不同的问题,我希望你看看现有的答案,而不是我们在这里讨论。如果我的回答对您有帮助,请点赞并接受以帮助其他面临类似问题的人。干杯和感谢:)
  • 好的,先生,其实我只是在问。但非常感谢你的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多