【三十天精通Vue 3】第八天 Vue 3 生命周期钩子详解

news2025/2/28 17:03:18

请添加图片描述

✅创作者:陈书予
🎉个人主页:陈书予的个人主页
🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区
🌟专栏地址: 三十天精通 Vue 3

文章目录

  • 引言
    • 一、Vue 3 生命周期钩子概述
      • 1.1 生命周期钩子的简介
      • 1.2 生命周期钩子的分类
      • 1.3 生命周期钩子的语法
    • 二、Vue 3 组件的生命周期钩子
      • 2.1 beforeCreate 钩子
      • 2.2 created 钩子
      • 2.3 beforeMount 钩子
      • 2.4 mounted 钩子
      • 2.5 beforeUpdate 钩子
      • 2.6 updated 钩子
    • 三、Vue 3 组件的局部生命周期钩子
      • 3.1 beforeMount 钩子
      • 3.2 mounted 钩子
      • 3.3 beforeUpdate 钩子
      • 3.4 updated 钩子
    • 四、Vue 3 生命周期钩子的应用场景
      • 4.1 组件的创建和更新
        • 4.1.1 beforeCreate 和 created
        • 4.1.2 beforeMount 和 mounted
        • 4.1.3 beforeUpdate 和 updated
      • 4.2 组件的数据更新
        • 4.2.1 beforeUpdate 和 updated
      • 4.3 组件的事件处理
        • 4.3.1 beforeMount 和 mounted
    • 五、Vue 3 生命周期钩子的常见问题及解决方案
      • 5.1 生命周期钩子的执行顺序问题
      • 5.2 生命周期钩子的执行时机问题
      • 5.3 生命周期钩子的性能问题

引言

Vue 3 生命周期钩子是 Vue 3 新增的一个重要特性,它可以帮助开发者更加精细地控制组件的创建和更新,从而提高组件的性能和响应速度。今天,我们将详细介绍 Vue 3 生命周期钩子的概念、分类、语法和应用,以及生命周期钩子常见的问题和解决方案。

一、Vue 3 生命周期钩子概述

1.1 生命周期钩子的简介

生命周期钩子是 Vue 3 新增的一种特性,它允许开发者在组件的创建和更新过程中执行自定义代码。在 Vue 3 中,组件的生命周期分为七个钩子函数,分别是 beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy 和 destroyed。这些钩子函数在不同的生命周期阶段执行,可以用于更新组件、处理事件、处理数据等

1.2 生命周期钩子的分类

Vue 3 的生命周期钩子可以分为三类:

  • 组件生命周期钩子:

包括 beforeCreate、created、beforeMount、mounted、beforeUpdate、updated 和 beforeDestroy 七个钩子函数,它们分别出现在组件的创建和更新过程中。

  • 局部生命周期钩子:

包括 beforeMount、mounted、beforeUpdate 和 updated 四个钩子函数,它们分别出现在组件的局部挂载、更新、更新前后和卸载过程中。

  • 事件生命周期钩子:

包括 beforeMount、mounted、beforeUpdate 和 updated 四个钩子函数,它们分别出现在组件的局部挂载、更新、更新前后和卸载过程中,可以用于处理事件。

1.3 生命周期钩子的语法

生命周期钩子语法非常简单,只需要在组件的声明部分添加生命周期钩子函数名,并在函数名上面添加一个双冒号 ::。例如,下面的代码展示了一个包含 beforeCreate 钩子的组件:

export default {  
  name: 'MyComponent',  
  props: {  
    value: {  
      type: String,  
      default: ''  
    }  
  },  
  data() {  
    return {  
      message: ''  
    }  
  },  
  beforeCreate() {  
    console.log(`Before create, value: ${this.value}`);  
  }  
}

二、Vue 3 组件的生命周期钩子

2.1 beforeCreate 钩子

beforeCreate 是 Vue 3 组件实例刚刚被创建时执行的钩子函数。在这一阶段,我们通常需要执行一些初始化操作,例如从服务器获取数据或者从缓存中检索数据。以下是一个使用 beforeCreate 钩子实现从服务器获取数据的示例代码:

import { created, beforeCreate } from 'vue';

export default {  
  created() {  
    this.$http.get('data.json')  
      .then(response => {  
        this.data = response.data;  
      });  
  },  
};  

在这个示例中,我们在组件实例被创建时使用$http 方法从服务器获取数据。获取成功后,我们将数据存储在组件实例的 data 属性中。

2.2 created 钩子

created 是 Vue 3 组件实例已经创建完成并加载完毕时执行的钩子函数。在这一阶段,我们可以访问组件实例的 data、props、methods 等数据,但是$el 属性还未被创建,还不能访问 DOM 节点。以下是一个使用 created 钩子实现获取数据后更新 UI 的示例代码:

import { created } from 'vue';

export default {  
  created() {  
    this.data = 'Hello Vue!';  
  },  
};  

在这个示例中,我们在组件实例被创建时将数据设置为"Hello Vue!",然后通过 data 属性访问数据,并将其显示在 UI 中。

2.3 beforeMount 钩子

beforeMount 是 Vue 3 组件模板挂载开始时执行的钩子函数。在这一阶段,我们通常需要执行一些模板挂载时需要的操作,例如设置 class、绑定事件等。以下是一个使用 beforeMount 钩子实现在组件模板中使用 class 的示例代码:

import { beforeMount } from 'vue';

export default {  
  beforeMount() {  
    this.classList.add('active');  
  },  
};  

在这个示例中,我们在组件模板中使用 class 属性来设置一个状态,然后在 beforeMount 钩子函数中使用 classList 方法将状态设置为 active。

2.4 mounted 钩子

mounted 是 Vue 3 组件模板已经被渲染到 DOM 中时执行的钩子函数。在这一阶段,我们可以访问 DOM 节点,可以执行任何与 DOM 相关的操作。以下是一个使用 mounted 钩子实现在组件模板中使用 DOM 节点的示例代码:

import { mounted } from 'vue';

export default {  
  mounted() {  
    const $el = this.$el;  
    const textContent = $el.textContent;  
    console.log(`The element is mounted with: ${textContent}`);  
  },  
};  

在这个示例中,我们在组件实例被渲染到 DOM 中时访问$el 属性,并获取 DOM 节点的文本内容,然后将文本内容打印到控制台中。

2.5 beforeUpdate 钩子

beforeUpdate 钩子函数中,我们可以更新组件的 UI,例如更改文本、更改样式或者重新加载数据。以下是一个使用 beforeUpdate 钩子实现更新 UI 的示例代码:

import { beforeUpdate } from 'vue';

export default {  
  methods: {  
    updateUI() {  
      // 更新文本内容  
      this.textContent = 'Hello Vue 3!';  
      // 更新样式  
      this.classList.add('new-class');  
      // 重新加载数据  
      this.$fetch('/api/data').then(response => {  
        this.data = response.data;  
      });  
    }  
  }  
};  

在这个示例中,我们在 beforeUpdate 钩子函数中更新文本内容、样式以及重新加载数据。当数据更新时,组件的 UI 也会随之更新。

2.6 updated 钩子

updated 是 Vue 3 组件数据更新后执行的钩子函数。在这一阶段,我们通常需要执行一些更新操作,例如更新 UI、重新加载数据等。以下是一个使用 updated 钩子实现更新 UI 的示例代码:

import { updated } from 'vue';

export default {  
  data() {  
    return {  
      textContent: 'Hello Vue 3!',  
      classList: ['active']  
    };  
  },  
  methods: {  
    updateUI() {  
      // 更新文本内容  
      this.textContent = 'Hello Vue 3!';  
      // 更新样式  
      this.classList.remove('active');  
      // 重新加载数据  
      this.$fetch('/api/data').then(response => {  
        this.data = response.data;  
      });  
    }  
  }  
};  

在这个示例中,我们在 updated 钩子函数中更新文本内容、样式以及重新加载数据。当数据更新时,组件的 UI 也会随之更新。

三、Vue 3 组件的局部生命周期钩子

3.1 beforeMount 钩子

beforeMount 钩子是在组件模板挂载开始之前执行的生命周期钩子。在 beforeMount 钩子中,我们可以执行一些与模板挂载相关的操作,例如设置 class、绑定事件等。以下是一个使用 beforeMount 钩子实现在组件模板中使用 class 的示例代码:

import { beforeMount } from 'vue';

export default {  
  methods: {  
    addClassName() {  
      this.classList.add('active');  
    }  
  },  
  beforeMount() {  
    this.classList.add('ready');  
  }  
};  

在这个示例中,我们在组件模板中使用 class 属性来设置一个状态,然后在 beforeMount 钩子函数中使用 classList 方法将状态设置为 active。

3.2 mounted 钩子

mounted 钩子是在组件模板已经被渲染到 DOM 中之后执行的生命周期钩子。在 mounted 钩子中,我们可以访问 DOM 节点,并执行任何与 DOM 相关的操作。以下是一个使用 mounted 钩子实现在组件模板中使用 DOM 节点的示例代码:

import { mounted } from 'vue';

export default {  
  mounted() {  
    const $el = this.$el;  
    const textContent = $el.textContent;  
    console.log(`The element is mounted with: ${textContent}`);  
  }  
};  

在这个示例中,我们在组件模板中使用 $el 属性访问 DOM 节点,并使用 textContent 方法获取文本内容。

3.3 beforeUpdate 钩子

beforeUpdate 钩子是 Vue 3 组件数据更新时执行的生命周期钩子,但模板并没有重新渲染。在 beforeUpdate 钩子中,我们可以执行一些更新操作,例如更新组件的 UI、重新加载数据等。以下是一个使用 beforeUpdate 钩子实现更新组件 UI 的示例代码:

import { beforeUpdate } from 'vue';

export default {  
  methods: {  
    updateUI() {  
      this.textContent = 'Hello Vue 3!';  
      this.$fetch('/api/data').then(response => {  
        this.data = response.data;  
      });  
    }  
  },  
  beforeUpdate() {  
    this.textContent = 'Hello Vue 3!';  
  }  
};  

在这个示例中,我们在 beforeUpdate 钩子函数中更新文本内容、样式以及重新加载数据。当数据更新时,组件的 UI 也会随之更新。

3.4 updated 钩子

updated 生命周期钩子在组件实例被更新时执行,例如在组件中使用 v-model 指令绑定的值更新时,或者在使用 watch 监听数据变化时。在 updated 生命周期钩子中,可以更新组件的状态或者执行其他操作,以确保组件的响应式数据与前端视图保持同步。

下面是一个示例代码,展示了如何在 Vue 3 中使用 updated 生命周期钩子更新组件状态:

import { created, updated } from 'vue'

export default {    
  name: 'MyComponent',    
  data() {    
    return {    
      count: 0    
    }    
  },    
  created() {    
    this.count = this.count + 1    
  },    
  updated() {    
    console.log(`Component updated with count: ${this.count}`)    
  }    
}

在上面的代码中,我们在 created 生命周期钩子中初始化 count 变量,并在 updated 生命周期钩子中更新 count 变量。当 count 变量的数据更新时,updated 生命周期钩子将会被执行,从而更新组件状态。

需要注意的是,updated 生命周期钩子并不会在组件实例的 mounted 生命周期钩子之后执行,而是在组件实例的 created 生命周期钩子之后执行。因此,如果需要在组件实例的 mounted 生命周期钩子之后更新组件状态,可以使用 updated 生命周期钩子。

四、Vue 3 生命周期钩子的应用场景

4.1 组件的创建和更新

组件的创建和更新是 Vue 3 生命周期钩子的重要应用场景之一。在 Vue 3 中,组件的创建和更新是由生命周期钩子来完成的。以下是几个常用的生命周期钩子:

4.1.1 beforeCreate 和 created

beforeCreate 和 created 是组件创建过程中的两次关键事件。在 beforeCreate 中,你可以执行一些前置操作,例如设置组件实例的属性和数据等。在 created 中,你可以执行一些后置操作,例如加载组件所需的数据等。

以下是一个示例代码:

import { beforeCreate, created } from 'vue'

export default {  
  beforeCreate() {  
    console.log('Before create')  
  },  
  created() {  
    console.log('After create')  
  }  
}

4.1.2 beforeMount 和 mounted

beforeMount 和 mounted 是组件挂载过程中的两次关键事件。在 beforeMount 中,你可以执行一些前置操作,例如设置组件的初始渲染函数等。在 mounted 中,你可以执行一些后置操作,例如处理组件的数据等。

以下是一个示例代码:

import { beforeMount, mounted } from 'vue'

export default {  
  beforeMount() {  
    console.log('Before mount')  
  },  
  mounted() {  
    console.log('After mount')  
  }  
}

4.1.3 beforeUpdate 和 updated

beforeUpdate 和 updated 是组件更新过程中的两次关键事件。在 beforeUpdate 中,你可以执行一些前置操作,例如更新组件的数据等。在 updated 中,你可以执行一些后置操作,例如处理组件更新后的数据等。

以下是一个示例代码:

import { beforeUpdate, updated } from 'vue'

export default {  
  beforeUpdate( prevData, prev prevData2 ) {  
    console.log('Before update')  
  },  
  updated( data ) {  
    console.log('After update')  
  }  
}

4.2 组件的数据更新

组件的数据更新也是 Vue 3 生命周期钩子的重要应用场景之一。在 Vue 3 中,组件的数据更新是由更新生命周期钩子来完成的。以下是几个常用的更新生命周期钩子:

4.2.1 beforeUpdate 和 updated

beforeUpdate 和 updated 是组件更新过程中的两次关键事件。在 beforeUpdate 中,你可以执行一些前置操作,例如更新组件的数据等。在 updated 中,你可以执行一些后置操作,例如处理组件更新后的数据等。

以下是一个示例代码:

import { beforeUpdate, updated } from 'vue'

export default {  
  data() {  
    return {  
      count: 0  
    }  
  },  
  beforeUpdate() {  
    console.log('Before update')  
    this.count = this.count + 1  
  },  
  updated( data ) {  
    console.log('After update')  
    console.log(this.count)  
  }  
}

4.3 组件的事件处理

组件的事件处理也是 Vue 3 生命周期钩子的重要应用场景之一。在 Vue 3 中,组件的事件处理是由事件生命周期钩子来完成的。以下是几个常用的事件生命周期钩子:

4.3.1 beforeMount 和 mounted

beforeMount 和 mounted 是组件挂载过程中的两次关键事件。在 beforeMount 中,你可以监听事件并在事件触发时执行一些前置操作。在 mounted 中,你可以监听事件并在事件触发时执行一些后置操作。

以下是一个示例代码:

import { beforeMount, mounted } from 'vue'

export default {  
  beforeMount() {  
    console.log('Before mount')  
  },  
  mounted() {  
    console.log('After mount')  
    // 可以在这里监听事件并执行一些操作  
  }  
},

// 事件监听  
onEvent() {  
  console.log('Event trigger')  
}

五、Vue 3 生命周期钩子的常见问题及解决方案

5.1 生命周期钩子的执行顺序问题

在 Vue 3 中,生命周期钩子的执行顺序是按照以下规则进行的:

  1. 根组件的生命周期钩子先被执行,即 <root> 标签下的组件的生命周期钩子先被执行。
  2. 然后,根组件的子组件的生命周期钩子依次被执行。
  3. 最后,所有被虚拟 DOM 更新的组件的生命周期钩子被执行。

这个规则有助于我们了解 Vue 3 组件生命周期的工作原理,但是在某些情况下,这个规则可能会导致一些问题。例如,如果我们在子组件中使用 mounted 钩子函数来更新父组件的值,那么父组件的 beforeMount 钩子函数不会被执行,因为在子组件挂载之前,父组件已经被虚拟 DOM 更新了。

解决方案:对于按照上述顺序执行的生命周期钩子,我们可以通过使用 vue-router 中的 beforeMount 钩子函数来更新路由参数,从而避免在子组件挂载之前更新父组件的值。

import { navigate } from 'vue-router';

export default {  
  methods: {  
    async beforeMount() {  
      await this.$nextTick(); // 确保页面加载完成后再更新路由参数  
      navigate('/route-name', { query: this.$route.query });  
    }  
  }  
}

在这个例子中,beforeMount 钩子函数会在子组件挂载之前被执行,然后会等待页面加载完成后,再更新路由参数。这样做可以避免在子组件挂载之前更新父组件的值,从而保证父组件的 mounted 钩子函数能够正常执行。

5.2 生命周期钩子的执行时机问题

在 Vue 3 中,生命周期钩子函数的执行时机是非常灵活的,可以根据需要进行自定义。例如,我们可以通过在父组件中使用 beforeMount 钩子函数来监听子组件挂载的时机,从而在子组件挂载之前执行一些操作。

但是,有时候我们的生命周期钩子函数的执行时机不够准确,可能会出现一些问题。例如,如果我们在子组件中使用 mounted 钩子函数来更新父组件的值,但是父组件的 beforeMount 钩子函数没有在子组件挂载之前执行,那么子组件的 mounted 钩子函数很可能会在父组件的 mounted 钩子函数之后执行,从而导致一些不可预知的结果。

解决方案:我们可以通过使用 beforeMountmounted 两个钩子函数来确保生命周期钩子函数的执行时机准确。在子组件中使用 mounted 钩子函数来更新父组件的值,确保在父组件的 mounted 钩子函数之前执行。

import { navigate } from 'vue-router';

export default {  
  methods: {  
    async beforeMount() {  
      await this.$nextTick(); // 确保页面加载完成后再更新路由参数  
      navigate('/route-name', { query: this.$route.query });  
    },  
    mounted() {  
      // 更新父组件的值  
    }  
  }  
}

在这个例子中,beforeMount 钩子函数会在子组件挂载之前被执行,然后会等待页面加载完成后,再更新路由参数。而 mounted 钩子函数则会在子组件挂载完成后被执行,从而确保父组件的 mounted 钩子函数能够在此之前执行。

5.3 生命周期钩子的性能问题

由于 Vue 3 中的生命周期钩子是异步执行的,因此在处理大量实例时,可能会导致性能问题。以下是一些优化生命周期钩子性能的方法:

  1. 避免在生命周期钩子中执行耗时操作

在生命周期钩子中,避免在执行耗时操作,例如网络请求、计算、监听事件等。这些操作应该被避免或者在最必要时进行。可以通过将耗时操作移动到创建或更新实例之前,或者使用异步操作来避免这些问题。

  1. 缓存生命周期钩子结果

在多次使用相同的生命周期钩子时,应该缓存结果,避免重复执行。例如,在 created 生命周期钩子中,可以缓存 this.$routerthis.$root 等对象,避免重复计算。

  1. 避免在生命周期钩子中创建新对象

在生命周期钩子中,应该避免创建新的对象,例如在 mounted 生命周期钩子中创建新的数组或对象。这可能会导致性能问题,因为创建新对象需要消耗内存和时间。可以通过使用已有的对象或使用对象池来避免这些问题。

下面是一个示例代码,展示了如何在 Vue 3 中使用生命周期钩子优化性能:

import { created, beforeCreate, mounted, beforeDestroy, destroyed } from 'vue'

const delay = ms => new Promise(resolve => setTimeout(resolve, ms))

export default {  
  name: 'MyComponent',  
  data() {  
    return {  
      count: 0  
    }  
  },  
  生命周期钩子优化:{  
    created() {  
      this.count = this.count + 1  
    },  
    beforeCreate() {  
      delay(1000).then(() => {  
        this.count = 0  
      })  
    },  
    mounted() {  
      console.log(`Component mounted with count: ${this.count}`)  
    },  
    beforeDestroy() {  
      console.log(`Component beforeDestroy with count: ${this.count}`)  
    },  
    destroyed() {  
      console.log(`Component destroyed with count: ${this.count}`)  
    }  
  }  
}

在上面的代码中,我们使用 createdbeforeCreate 生命周期钩子来在实例创建时执行一些操作,使用 mountedbeforeMount 生命周期钩子来在实例挂载时执行一些操作,使用 beforeDestroydestroyed 生命周期钩子来在实例销毁时执行一些操作。我们还使用了 生命周期钩子优化 选项来缓存一些对象,避免重复计算,并且避免在 createdmounted 生命周期钩子中创建新的对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/426600.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mulesoft MCIA 破釜沉舟备考 2023.04.14.11

mulesoft MCIA 破釜沉舟备考 2023.04.14.111. To implement predictive maintenance on its machinery equipment, ACME Tractors has installed thousands of IoT sensors that will send data for each machinery asset as sequences of JMS messages, in near real-time, to…

惠普Probook455电脑开机突然卡住无法进入桌面

惠普Probook455电脑开机突然卡住无法进入桌面解决方法分享。最近有用户使用的惠普Probook455电脑在开机的时候&#xff0c;电脑一直卡在开机的界面上&#xff0c;无法进入到系统中。无论是重启还是安全模式都无法解决问题。那么遇到这个情况怎么去进行问题的解决&#xff0c;来…

C++---状态压缩dp---炮兵阵地(每日一道算法2023.4.16)

注意事项&#xff1a; 本题为"状态压缩dp—蒙德里安的梦想"和"状态压缩dp—小国王"和"状态压缩dp—玉米田"的近似题&#xff0c;建议先阅读这三篇文章并理解。 题目&#xff1a; 司令部的将军们打算在 NM 的网格地图上部署他们的炮兵部队。 一个…

GoogleTest+VS code编译和编写简单测试用例

目录前言一、安装gtest二、 编译gtest与运行单元测试第一种编译方式第二种编译方式前言 在B站看了非常多Gtest的教学视频&#xff0c;CSDN上gtest博客也特别多&#xff0c;但是都非常陈旧或者根本不是用vscode。本篇目的在于&#xff0c;说明如何在vscode上编写简单单元测试。…

day01_Java概述丶环境搭建

Java背景知识 Java概述 概述&#xff1a;计算机语言就是人与计算机之间进行信息交流沟通的一种特殊语言。所谓计算机编程语言&#xff0c;就是人们可以使用编程语言对计算机下达命令&#xff0c;让计算机完成人们需要的功能。 Java语言&#xff1a;是美国Sun公司&#xff08…

Siamese network

文章目录一、相似性度量1. 欧氏距离2. 马氏距离二、Siamese network1. Siamese network 基础架构2. 损失函数3. 不同的Siamese network3.1. 行人重识别3.2 其他应用场景一、相似性度量 相似性度量是机器学习中一个非常基础的概念&#xff0c;是评定两个事物之间相似程度的一种度…

E: 仓库 “http://mirrors.aliyun.com/ubuntu eoan Release” 没有 Release 文件 —— 解决方案

Ubuntu 20.04 更新的时候&#xff0c;遇到如下问题&#xff1a; 可以通过修改源&#xff0c;来进行修复&#xff1a; 1、登录如下网址&#xff1a;LUGs repo file generator 2、选择对应的 Ubuntu 版本&#xff0c;这里我是 Ubuntu 20.04 点击 Download&#xff0c;会下载一个 …

DUBBO注册中心

注册中心上保存四种类型的数据: providers: 服务提供者目录,记录着服务提供者的ip、端口等信息。 consumers: 服务消费者目录,记录服务消费者的元数据信息,服务提供者并不会用到服务消费者的信息,这里要记录消费者的信息,是给服务治理中心(dubbo-admin)使用的。 route…

五分钟排查Linux的健康状态

五分钟排查Linux的健康状态1. CPU1.1 top命令1.2 什么是负载1.3 vmstat2. 内存2.1 观测命令2.2 CPU缓存2.3 HugePage2.4 预先加载3. I/O3.1 观测命令3.2 零拷贝4. 网络参考&#xff1a;《Linux运维实战》、xjjdog 操作系统作为所有程序的载体&#xff0c;对应用的性能影响是非常…

论文阅读 | Interpolated Convolutional Networks for 3D Point Cloud Understanding

前言&#xff1a;ICCV2019点云特征提取点卷积InterpoConv Interpolated Convolutional Networks for 3D Point Cloud Understanding 引言 点云是不规则、无序、且稀疏的 处理这样的点云数据有两大类方法 第一&#xff1a;voxel化 directly rasterize irregular point clouds…

《Netty》从零开始学netty源码(三十八)之PoolSubPage

PoolSubPage 上一节中我们提到了PooledByteBufAllocator类&#xff0c;先看下netty中有关内存的类关系&#xff1a; 从图中可以看到PoolSubPage为最小单位&#xff0c;所以我们先从最小的开始分析&#xff0c;先看下它的属性值&#xff1a; 为了更好的理解这些属性的意义&…

表情包MD编辑器简单使用

&#x1f337;1 表情包 ⭐️&#xff08;1&#xff09;常规表情图标 &#x1f600; &#x1f601; &#x1f602; &#x1f603; &#x1f604; &#x1f605; &#x1f606; &#x1f609; &#x1f60a; &#x1f60b; &#x1f60e; &#x1f60d; &#x1f618; &#x1…

(Deep Learning)交叉验证(Cross Validation)

交叉验证&#xff08;Cross Validation&#xff09; 交叉验证&#xff08;Cross Validation&#xff09;是一种评估模型泛化性能的统计学方法&#xff0c;它比单次划分训练集和测试集的方法更加稳定、全面。 交叉验证不但可以解决数据集中数据量不够大的问题&#xff0c;也可以…

CSS中flex属性的的使用以及应用场景有哪些

文章目录一. flex属性?(虚假的) --- 这里主要是回顾1.1 flex-grow1.2 flex-shrink1.3 flex-basis二. flex属性 ! (真正的!!!)三. flex一些常见的值, 以及使用场景3.1 flex:initial 使用场景3.2 flex:0 和 flex:node 适用场景3.3 flex:1 和 flex:auto3.4 总结一. flex属性?(虚…

54 openEuler搭建Mariadb数据库服务器-Mariadb介绍

文章目录54 openEuler搭建Mariadb数据库服务器-Mariadb介绍54.1 MariaDB的架构54.2 MariaDB的存储引擎54 openEuler搭建Mariadb数据库服务器-Mariadb介绍 MariaDB数据库管理系统是MySQL的一个分支&#xff0c;主要由开源社区在维护&#xff0c;采用GPL授权许可。MariaDB的目的…

零售数据分析操作篇14:利用内存计算做销售筛选分析

各位数据的朋友&#xff0c;大家好&#xff0c;我是老周道数据&#xff0c;和你一起&#xff0c;用常人思维数据分析&#xff0c;通过数据讲故事。 上一讲讲了图表间联动的应用场景&#xff0c;即当我们点击某个图表时&#xff0c;会影响其他图表一起变化&#xff0c;而变化背…

Vue3 Element-plus el-menu无限级菜单组件封装

对于element中提供给我们的el-menu组件最多可以实现三层嵌套&#xff0c;如果多一层数据只能自己通过变量去加一层&#xff0c;如果加了两层、三层这种往往是行不通的&#xff0c;所以只能进行封装 效果图一、定义数据 MenuData.ts export default [{id: "1",name:…

spring boot 访问HTML

HTML整合spring boot简介默认文件路径访问自定义文件路径访问或通过Controller控制器层跳转访问简介 SpringBoot默认的页面映射路径&#xff08;即模板文件存放的位置&#xff09;为“classpath:/templates/*.html”。静态文件路径为“classpath:/static/”&#xff0c;其中可…

三菱FX3U PLC计米轮功能块(完整ST代码)

计米轮功能块(wheel_FB)详细计米、测速原理请参看下面的博客: PLC高速脉冲输入计米轮模块(编码器测速/计米详细讲解)_RXXW_Dor的博客-CSDN博客线缆行业单绞机PLC控制算法详细解读可以参看下面的文章链接:线缆行业单绞机控制算法(详细图解+代码)_RXXW_Dor的博客-CSDN博客在…

大佬入局AI,职场人有新机会了?

卸任搜狗CEO一年半后&#xff0c;王小川宣布在AI大模型领域创业&#xff0c;与前搜狗COO茹立云联合成立人工智能公司百川智能&#xff0c;打造中国版的OpenAI&#xff0c;并对媒体表示&#xff1a;“追上ChatGPT水平&#xff0c;我觉得今年内可能就能够实现&#xff0c;但对于G…