面试题答案
一键面试onMount可用于的具体操作
- 初始化第三方库:例如初始化一个图表库,如Chart.js。在Svelte组件中,通过
onMount
可以确保在组件挂载到DOM后才进行图表的初始化操作,这样能保证DOM元素已经存在,避免因DOM未就绪而导致的错误。
<script>
import { onMount } from'svelte';
import Chart from 'chart.js';
let chart;
onMount(() => {
const ctx = document.getElementById('myChart').getContext('2d');
chart = new Chart(ctx, {
type: 'bar',
data: {
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
}
}
});
});
</script>
<canvas id="myChart"></canvas>
- 设置DOM元素的属性:比如设置一个输入框的焦点。当组件挂载后,通过
onMount
获取输入框的DOM元素并调用focus
方法,使输入框自动获得焦点。
<script>
import { onMount } from'svelte';
let input;
onMount(() => {
input.focus();
});
</script>
<input bind:this={input} type="text" />
在动态组件中正确使用onMount
- 导入
onMount
:首先从svelte
库中导入onMount
函数。
<script>
import { onMount } from'svelte';
</script>
- 定义
onMount
回调:在组件的<script>
标签内定义onMount
的回调函数。这个回调函数中的代码会在组件挂载到DOM后立即执行。
<script>
import { onMount } from'svelte';
onMount(() => {
// 这里写挂载后要执行的操作
});
</script>
- 动态组件使用场景:在动态组件加载时,每个动态加载的组件都可以有自己的
onMount
逻辑。例如,通过{#if condition}
或者{#await promise}
等方式动态加载组件时,组件一旦挂载就会执行其内部的onMount
函数。
<script>
import { onMount } from'svelte';
let showComponent = false;
const MyComponent = () => {
onMount(() => {
console.log('MyComponent has been mounted');
});
return <div>My Component Content</div>;
};
</script>
{#if showComponent}
<MyComponent />
{/if}
<button on:click={() => showComponent =!showComponent}>Toggle Component</button>
当showComponent
为true
时,MyComponent
被挂载,onMount
中的console.log
会执行。