相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!
?点赞?收藏?不迷路!?
Vue的生命周期包括以下几个阶段:
在Vue中,父组件和子组件的生命周期钩子执行顺序如下:
在更新阶段:
在销毁阶段:
通常,在Vue的生命周期中,异步数据请求放在 mounted
钩子中进行。这是因为在 mounted
钩子中,Vue实例已经挂载到DOM上,可以访问到DOM元素,同时也确保了子组件都已经被挂载。
在 mounted
钩子中进行异步数据请求的优势是能够在数据请求完成后直接对数据进行操作,同时不会阻塞组件的渲染。这样可以避免一开始就渲染空数据或者 loading 状态。
示例:
export default {
mounted() {
// 发起异步数据请求
fetchData()
.then(data => {
// 处理数据
this.data = data;
})
.catch(error => {
console.error('Error fetching data:', error);
});
}
};
$attrs
是一个对象,包含了父作用域中不被 prop 所识别 (且获取) 的特性绑定 (class 和 style 除外)。$attrs
获取传递给子组件但未被子组件 prop 所定义的特性。$listeners
是一个对象,包含了父作用域中绑定的所有事件监听器。$listeners
获取父组件中绑定的所有事件监听器。这两个属性通常用于在子组件中处理特性绑定和事件监听器,使得子组件能够更灵活地接收和处理从父组件传递的属性和事件。
示例:
<template>
<div>
<!-- 子组件处理特性绑定 -->
<p v-bind="$attrs">Additional attributes from parent</p>
<!-- 子组件处理事件监听器 -->
<button v-on="$listeners">Click me</button>
</div>
</template>
<script>
export default {
// ...
};
</script>
props
是用来从父组件向子组件传递数据的机制。props
属性接收并使用这些数据。props
用于接收数据,但不能修改数据。$emit
是用来在子组件向父组件传递信息的机制。$emit
方法触发自定义事件,并传递数据给父组件。v-on
监听子组件的自定义事件,从而响应子组件的行为。示例:
// 父组件
<template>
<child-component :message="message" @custom-event="handleCustomEvent" />
</template>
<script>
export default {
data() {
return {
message: "Hello from parent"
};
},
methods: {
handleCustomEvent(data) {
console.log("Received data from child:", data);
}
}
};
</script>
// 子组件
<template>
<button @click="emitCustomEvent">Click me</button>
</template>
<script>
export default {
props: ["message"],
methods: {
emitCustomEvent() {
this.$emit("custom-event", "Data from child");
}
}
};
</script>
$emit / $on
)EventBus 是一个用于在不同组件之间进行通信的简单的事件中心。它可以通过 $emit
发送事件,在其他组件中通过 $on
监听事件。
示例:
// 创建一个简单的 EventBus
const eventBus = new Vue();
// 在发送组件中
eventBus.$emit("custom-event", data);
// 在接收组件中
eventBus.$on("custom-event", (data) => {
// 处理接收到的事件和数据
});
EventBus 允许不直接关联的组件进行通信,但需要小心使用,因为它可能会导致难以维护和追踪的事件流。在大型应用程序中,最好使用更专业的状态管理工具,如 Vuex。
provide
和 inject
是一对用于在祖先组件和后代组件之间进行依赖注入的选项。
provide
选项提供数据或方法。inject
选项接收并使用。inject
选项接收祖先组件提供的数据或方法。依赖注入在某些场景下可以简化组件之间的通信和数据共享,但也需要注意不要滥用它,以免导致组件之间的耦合度增加。
示例:
// 祖先组件
<template>
<div>
<child-component />
</div>
</template>
<script>
export default {
provide: {
message: "Hello from ancestor"
}
};
</script>
// 后代组件
<template>
<div>
<p>{{ message }}</p>
</div>
</template>
<script>
export default {
inject: ["message"]
};
</script>
ref
是用来在Vue组件中获取对DOM元素或子组件的引用的方式。ref
特性给DOM元素或组件命名,然后在Vue实例中通过 this.$refs
来访问它们。$refs
是一个对象,包含了所有在模板中使用 ref
特性命名的DOM元素或子组件的引用。$refs
直接访问这些引用,进行操作或调用方法。示例:
<template>
<div>
<input type="text" ref="inputRef" />
<button @click="focusInput">Focus Input</button>
</div>
</template>
<script>
export default {
methods: {
focusInput() {
this.$refs.inputRef.focus();
}
}
};
</script>
$parent
是Vue实例的一个属性,用于访问父组件的实例。$parent
访问父组件的数据和方法。$children
是Vue实例的一个属性,用于访问子组件的实例数组。$children
访问所有子组件的数据和方法。使用 $parent
和 $children
可以在父子组件之间进行通信,但需要注意的是,这种方式会导致组件之间的耦合度增加,不太推荐在大型应用中使用。最好的做法是通过 props
和 $emit
进行父子组件之间的通信,以保持组件的独立性和可维护性。
开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system
已 300 + Star!
?点赞?收藏?不迷路!?