面试题答案
一键面试-
实现步骤:
- 创建自定义Action函数:在Svelte中,自定义Action是一个函数,它接收一个DOM元素(图表将渲染在这个元素上)和一些可选的参数(例如图表的配置项)。
- 在Action函数中初始化图表:当组件挂载时,
onMount
钩子会调用这个Action函数。在函数内部,使用第三方图表库(如Chart.js)基于传入的DOM元素初始化图表。 - 处理数据更新:可以通过观察数据变化,当数据更新时,调用图表库提供的更新方法来更新图表。
-
关键代码示例:
- 首先安装Chart.js:
npm install chart.js
- 创建Svelte组件并编写自定义Action:
- 首先安装Chart.js:
<script>
import { onMount } from'svelte';
import Chart from 'chart.js';
// 自定义Action
function createChart(node, config) {
let chart;
const updateChart = () => {
if (chart) {
// 这里假设config.data是会变化的数据
chart.data = config.data;
chart.update();
}
};
onMount(() => {
chart = new Chart(node, config);
return () => {
if (chart) {
chart.destroy();
}
};
});
return {
update: updateChart
};
}
// 图表数据和配置
let chartData = {
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
}
]
};
let chartConfig = {
type: 'bar',
data: chartData,
options: {
scales: {
y: {
beginAtZero: true
}
}
}
};
</script>
<div use:createChart={chartConfig}></div>
在上述代码中:
createChart
函数是自定义Action,接收node
(DOM元素)和config
(图表配置)。onMount
钩子在组件挂载时初始化图表,并返回一个销毁函数用于在组件卸载时销毁图表。updateChart
函数用于在数据更新时更新图表,通过return {update: updateChart}
暴露给Svelte以便在数据变化时调用。- 在组件模板中,通过
use:createChart={chartConfig}
使用这个自定义Action。当chartData
数据变化时,可以手动调用update
方法来更新图表(这里代码中没有展示数据变化时手动调用的逻辑,实际应用中可以根据业务场景添加)。