生命周期_axios

目录​​​​​​​

一、钩子函数

 1.钩子函数-初始化阶段

2.钩子函数-挂载阶段

 3.钩子函数-更新阶段

4.钩子函数-销毁阶段

5.常用的钩子函数

二、axios

1.请求数据

2.查询数据

3.配置全局基地址

三、组件进阶

1.$refs

 2.$refs

3. refs案例---输入框聚焦


一、钩子函数

Vue 框架内置函数,随着组件的生命周期阶段,自动执行

⚫ 作用: 特定的时间点,执行特定的操作

⚫ 场景: 组件创建完毕后,可以在created 生命周期函数中发起Ajax 请求,从而初始化 data 数

⚫ 分类: 4大阶段8个方法

 1.钩子函数-初始化阶段

⚫beforeCreate():new Vue()之后,vue内部给实例对象添加了一些属性和方法,data和methods初始化之前

⚫create():data和methods初始化之后

使用场景:网络请求,注册全局事件:页面滚动

<template>
  <div>
    <p>学习生命周期 - 看控制台打印</p>
    <p>{{ msg }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      msg: "hello vue",
    };
  },

  // 一、初始化
  // new Vue()之后,vue内部给实例对象添加了一些属性和方法,data和methods初始化之前
  beforeCreate() {
    console.log("beforeCreate --- 执行");
    console.log(this.msg); //undefined
  },

//data和methods初始化之后
//使用场景:网络请求,注册全局事件:页面滚动
  created() {
    console.log("create --- 执行");
    console.log(this.msg); //hello vue
  },

  methods: {},
};
</script>

<style lang="scss" scoped></style>

2.钩子函数-挂载阶段


⚫beforeMount()挂载  真实DOM挂载之前,拿不到真实DOM

场景:预处理data,不会触发updated钩子函数

⚫mounted() 真实DOM挂载之后,拿到真实DOM

 场景:挂载后真是DOM

  beforeMount() {
    console.log("beforeMounte --- 执行");
    // console.log(document.getElementById("myP")); //null
  },

 
  mounted() {
    console.log("mounted --- 执行");
    // console.log(document.getElementById("myP")); //<p data-v-07b77a01 id="myP">hello vue</p>
  },

 3.钩子函数-更新阶段

  ⚫beforeUpdate()当data里数据改变, 更新DOM之前

  ⚫updated()当数据发生变化并更新页面后,获取最新的真实DOM

<template>
  <div>
    <ul id="myUL">
      <li v-for="(val, index) in arr" :key="index">{{ val }}</li>
    </ul>
    <button @click="arr.push(100)">数组添加末尾值</button>
  </div>
</template>



<script>
export default {
  data() {
    return {
      arr: [1, 2, 3, 4],
    
    };
  },

 
  beforeUpdate() {
    console.log("beforeUpate -- 执行"); //第一次点击button按钮,此语句执行,但是获取不到第四个li
    console.log(document.querySelectorAll("#myUL>li")[4]); //undefined
  },
 
  updated() {
    console.log("updated -- 执行"); //第一次点击button按钮,此语句执行,获取第四个li
    console.log(document.querySelectorAll("#myUL>li")[4]); //<li data-v-07b77a01="">100</li>
  },

 
};
</script>

4.钩子函数-销毁阶段

⚫前提:v-if="false" 销毁Vue实例

⚫场景:移除全局事件,移除当前组件的计时器、定时器(因为即使当前组件被销毁,定时器仍然会一直执行)、eventBus移除事件$off方法

<template>
  <div>

    <life v-if="show"></life>
    <button @click="show = false">销毁</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
     
      timer: "",
    };
  },

  beforeDestroy() {
    console.log(" beforeDestroy -- 执行");
    clearInterval(this.timer)//销毁life后将不再执行定时器
  },
  destroyed() {
    console.log(" destroyed -- 执行");
  },
};
</script>

5.常用的钩子函数

⚫created可以在此阶段获取data中的数据以及发送接口请求

⚫mounted在此阶段获取DOM元素,echars图标

⚫beforeDestroy在此阶段移除页面定时器和事件监听

二、axios

1.请求数据

使用async-awiat

<template>
  <div>
    <div>
      <h1>获取图书数据</h1>
      <button @click.prevent="getBooks">点击获取</button>
    </div>
  </div>
</template>

<script>
import axios from "axios";
export default {
  data() {
    return {};
  },
  methods: {
  async getBooks() {
      // axios({
      //   url: "http://liulongbin.top:3006/api/getbooks",
      //   // methods:"get"
      // }).then(res=>{
      //   console.log(res);
      // });

      const res = await axios({
        url: "http://liulongbin.top:3006/api/getbooks",
      })
      console.log(res);
    },
  },
};
</script>

<style lang="scss" scoped></style>

2.查询数据

<template>
  <div>
    <div>
      <h1>2-查询某本书的信息</h1>
      <input type="text" placeholder="请输入书名" v-model="bName" />
      <button @click="findFn">查询</button>
    </div>
  </div>
</template>
export default {
  methods: {
    async findFn() {
      const res = await axios({
        url: "/api/getbooks",

        params: {
          bookname: this.bName,
        },
      });
      console.log(res);
    },
};
</script>

3.配置全局基地址

import axios from "axios";

axios.defaults.baseURL = "基地址";

import axios from "axios";
axios.defaults.baseURL = "http://liulongbin.top:3006";
export default {
 
  methods: {
    
    async getBooks() {
      // axios({
      //   url: "http://liulongbin.top:3006/api/getbooks",
      //   // methods:"get"
      // }).then(res=>{
      //   console.log(res);
      // });

      const res = await axios({
        url: "/api/getbooks",
      });
      console.log(res);
    },
  },
};
</script>

三、组件进阶

1.$refs

子组件

<template>
  <div>
    <h1 ref="myH">这是一个P标签</h1>
    
  </div>
</template>

<script>
export default {
  data() {
    return {
      num:1
    };
  },
  methods: {
    fn(){
      console.log("子组件的方法被调用");
    }
  },
};
</script>

父组件

<template>
  <div>
    
    <child ref="myChild"></child>
  </div>
</template>

<script>
import child from "./components/child.vue";
export default {
  components: {
    child,
  },
  mounted() {
    this.$refs.myChild.fn();
    console.log(this.$refs.myChild.num);
  },
};
</script>

控制台打印

 2.$refs

<template>
  <div>
    <div>
      <h1>6-vue更新DOM是异步的</h1>
      <p ref="c">{{ count }}</p>
      <button @click="add">点击count++</button>
    </div>
  </div>
</template>
<script>


export default {
 
  data() {
    return {
      count: 0,
    };
  },
  methods: {
    add() {
      this.count++; //vue检测数据更新是异步的,开启一个DOM更新队列(异步任务)
       console.log(this.$refs.c.innerHTML);//第一次点击为0

    
    },
   
  },
};
</script>

 原因:vue更新DOM是异步的

 解决:await this.$nextTick();

过程:DOM更新完会依次触发$nextTick里的函数体

方法一

this.$nextTick(() => console.log(this.$refs.c.innerHTML)); //第一次点击为1

方法二

methods: {
    async clickFn() {
      this.count++;
      
      await this.$nextTick();
      console.log(this.$refs.myP.innerHTML);
    },
  },

3. refs案例---输入框聚焦

<template>
  <div>
    <input type="text" placeholder="输入框" v-if="show" ref="myInp" />
    <button v-else @click="btn">点击搜索</button>
  </div>
</template>

<script>
// 需求:点击按钮输入框显示并聚焦,按钮隐藏
export default {
  data() {
    return {
      show: false,
    };
  },
  methods: {
  async  btn() {
      this.show = true;
      // this.$refs.myInp.focus()  报错
      // 原因:data变化更新DOM是异步的
      // 输入框还没有挂载到真实DOM上
      // 解决:
      // 方法一
      // this.$nextTick(() => {
      //   this.$refs.myInp.focus();
      // });

      // 方法二
      await this.$nextTick();
      this.$refs.myInp.focus();
    },
  },
};
</script>

<style lang="scss" scoped></style>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在React生命周期钩子函数中使用axios是一种常见的做法,可以用于在组件的不同生命周期中发起异步请求或执行其他操作。其中,主要使用的钩子函数包括componentDidMount和componentDidUpdate。 在componentDidMount钩子函数中使用axios可以在组件挂载完成后立即发起请求。这个钩子函数在组件第一次渲染完成后被调用,通常用于初始化数据或进行一次性的数据获取操作。在该钩子函数中,你可以使用axios库发送异步请求,例如获取远程数据、调用API等。通过axios发送请求可以使用GET、POST、PUT等HTTP方法,并在请求完成后处理返回的数据。 另外,如果组件具有动态变化的属性或状态,并且需要在这些变化发生时执行一些操作,可以使用componentDidUpdate钩子函数。在该钩子函数中,你可以根据组件的属性(this.props)和状态(this.state)来判断是否需要发送axios请求,以及在请求完成后处理返回的数据。需要注意的是,使用componentDidUpdate时要谨慎判断更新条件,避免陷入无限循环。 综上所述,在React生命周期钩子函数中使用axios可以方便地进行异步请求和数据处理操作,使组件能够更好地与后端API进行交互。<span class="em">1</span> #### 引用[.reference_title] - *1* [react最新教程(包含初级-中级-高级)](https://download.csdn.net/download/shangrila_kun/11238855)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值