vue3中 onMounted 钩子函数(vue2中created钩子函数)

生活中的比喻,通俗易懂

假设你刚刚搬进了一个新家(即你的vue组件已经被挂载到页面上)。在搬进新家后,有些事情需要在你真值开始使用这个新家之前做好,比如:

    1.查看新家: 你可能需要检查新家的每个房间,看看哪里需要调整或装饰。这就像是你需要在组件挂载之后做一些初始化工作,以确保一切正常。

   2.设置家用设备:在新家里,你可能需要设置电视,网络,灯光等设备,确保它们都能正常工作。这就类似于在组件挂载后,进行一些DOM操作或网络请求来初始化组件的状态。

onMounted的作用

搬家完成后的检查: onMounted 就像是在你搬家完成后,进行的第一次全面检查。它会在组件已经被添加到页面上后执行。你可以在这里做一些必须在页面上元素存在后才能完成的操作,比如获取DOM元素的尺寸,发送网络请求等。

例子:你需要在新家中安装窗帘(需要先有窗户才能安装),在你的组件挂载后,你可能需要检查页面上的某些元素(比如查看组件的尺寸),然后根据这些信息来调整布局或进行其他操作。

<template>
    <div id="app">
   <ul>
     <li v-for="(item, index) in list" :key="item.id" class="news">
       <div class="left">
         <div class="title">{{ item.title }}</div>
         <div class="info">
           <span>{{ item.source }}</span>
           <span>{{ item.time }}</span>
         </div>
       </div>
       <div class="right">
         <img :src="item.img" alt="">
       </div>
     </li>
   </ul>
 </div>
</template>
<script setup>
   import { ref,onMounted } from 'vue';
   import axios from 'axios';

   // 创建响应式数据
   const list = ref([]);
   const word = ref('');
   onMounted(async() => {
       const res = await axios.get('http://hmajax.itheima.net/api/news');
       list.value = res.data.data;

     })


</script>

<style lang="scss" scoped>


    * {
      margin: 0;
      padding: 0;
      list-style: none;
    }
 
    .news {
      display: flex;
      height: 120px;
      width: 600px;
      margin: 0 auto;
      padding: 20px 0;
      cursor: pointer;
    }
 
    .news .left {
      flex: 1;
      display: flex;
      flex-direction: column;
      justify-content: space-between;
      padding-right: 10px;
    }
 
    .news .left .title {
      font-size: 20px;
    }
 
    .news .left .info {
      color: #999999;
    }
 
    .news .left .info span {
      margin-right: 20px;
    }
 
    .news .right {
      width: 160px;
      height: 120px;
    }
 
    .news .right img {
      width: 100%;
      height: 100%;
      object-fit: cover;
    }
  </style>

 vue2中created作用


<!DOCTYPE html>
<html lang="en">
 
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
      list-style: none;
    }
 
    .news {
      display: flex;
      height: 120px;
      width: 600px;
      margin: 0 auto;
      padding: 20px 0;
      cursor: pointer;
    }
 
    .news .left {
      flex: 1;
      display: flex;
      flex-direction: column;
      justify-content: space-between;
      padding-right: 10px;
    }
 
    .news .left .title {
      font-size: 20px;
    }
 
    .news .left .info {
      color: #999999;
    }
 
    .news .left .info span {
      margin-right: 20px;
    }
 
    .news .right {
      width: 160px;
      height: 120px;
    }
 
    .news .right img {
      width: 100%;
      height: 100%;
      object-fit: cover;
    }
  </style>
</head>
 
<body>
 
  <div id="app">
    <ul>
      <li v-for="(item, index) in list" :key="item.id" class="news">
        <div class="left">
          <div class="title">{{ item.title }}</div>
          <div class="info">
            <span>{{ item.source }}</span>
            <span>{{ item.time }}</span>
          </div>
        </div>
        <div class="right">
          <img :src="item.img" alt="">
        </div>
      </li>
    </ul>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>

    const app = new Vue({
        el: '#app',
        data: {
            list: [],
            word: ''    
        },
        // 一进页面就有
        async created() {
            const res = await axios.get('http://hmajax.itheima.net/api/news')
            console.log(res);
            // 更新到list中,用于页面渲染v-for
            this.list = res.data.data
        }
    })
  </script>

效果图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值