面试题:Vue 在 created 和 mounted 这两个生命周期钩子中请求数据有什么区别?

在 Vue 中,created 和 mounted 是两个常用的生命周期钩子,它们都可以用于请求数据,但它们的执行时机和适用场景有所不同。以下是它们的区别:


1. 执行时机

  • created
    • 在 Vue 实例创建完成后调用,此时 DOM 还未生成。
    • 适合在组件初始化时请求数据,但不涉及 DOM 操作。
  • mounted
    • 在 Vue 实例挂载到 DOM 后调用,此时 DOM 已经生成。
    • 适合在需要操作 DOM 或依赖 DOM 渲染的情况下请求数据。

2. 适用场景

  • created
    • 适合请求不需要依赖 DOM 的数据。
    • 例如:从后端 API 获取数据并初始化组件的状态。
    • 优点:尽早请求数据,可以更快地开始数据加载。
  • mounted
    • 适合请求依赖 DOM 的数据或需要在 DOM 渲染完成后执行的操作。
    • 例如:根据 DOM 元素的尺寸或位置加载数据,或初始化第三方库(如地图、图表等)。
    • 优点:确保 DOM 已渲染,可以安全地操作 DOM。

3. 代码示例

在 created 中请求数据

export default {
  data() {
    return {
      posts: []
    };
  },
  created() {
    this.fetchData();
  },
  methods: {
    async fetchData() {
      const response = await axios.get('/api/posts');
      this.posts = response.data;
    }
  }
};
  • 特点:数据请求在组件初始化时就开始,不依赖 DOM。

在 mounted 中请求数据

export default {
  data() {
    return {
      posts: []
    };
  },
  mounted() {
    this.fetchData();
  },
  methods: {
    async fetchData() {
      const response = await axios.get('/api/posts');
      this.posts = response.data;
    }
  }
};
  • 特点:数据请求在 DOM 渲染完成后开始,适合依赖 DOM 的操作。

4. 性能影响

  • created
    • 数据请求更早开始,可以更快地获取数据并渲染页面。
    • 但如果数据量较大或请求较慢,可能会导致页面渲染延迟。
  • mounted
    • 数据请求稍晚开始,但可以确保 DOM 已渲染,适合需要依赖 DOM 的场景。
    • 如果数据请求较慢,用户可能会看到部分空白内容。

5. 总结

特性createdmounted
执行时机组件实例创建完成,DOM 未生成组件挂载到 DOM 后,DOM 已生成
适用场景不依赖 DOM 的数据请求依赖 DOM 的数据请求或操作
性能影响数据请求更早开始,可能延迟渲染数据请求稍晚开始,确保 DOM 已渲染
推荐使用场景初始化数据、不涉及 DOM 的操作依赖 DOM 的操作、第三方库初始化

6. 最佳实践

  • 如果数据请求不依赖 DOM,优先在 created 中请求,以尽早获取数据。
  • 如果数据请求依赖 DOM 或需要在 DOM 渲染完成后执行操作,则在 mounted 中请求。
  • 对于复杂的组件,可以结合两者使用,例如在 created 中请求初始数据,在 mounted 中执行 DOM 相关操作。
THE END
点赞10 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容