Vue
by Yurik Elmanov
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<h2>Pics ({{ pics.length }}):</h2>
<main>
<div v-for="(pic, idx) in pics" :key="idx">
<img :src="pic.src"/>
<!-- <div>Loaded in: {{ pic.loadTime }} ms</div> -->
</div>
</main>
</div>
CSS
body {
background: #20262E;
padding: 20px;
font-family: Helvetica;
}
#app {
background: #fff;
border-radius: 4px;
padding: 20px;
transition: all 0.2s;
}
h2 {
font-weight: bold;
margin-bottom: 15px;
}
main {
margin: 0 auto;
width: min-content;
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-gap: 16px;
}
Vue
new Vue({
el: "#app",
async created () {
this.pics = await this.loadPics(20);
},
data: {
pics: []
},
methods: {
async loadPics (picsNumber) {
const result = [];
for (let i = 0; i < picsNumber; i++) {
result.push(fetch('https://picsum.photos/200/300'));
}
const data = await Promise.all(result);
console.log(data)
return data.map(({ url }) => ({ src: url }));
}
}
})