面试题答案
一键面试- 优化思路:
- onMount:在组件挂载时进行一次性的 DOM 初始化操作,例如添加初始的动画类名等。避免在每次更新时重复这些操作。
- onCleanup:在组件卸载时清理相关的 DOM 操作,比如清除定时器、移除事件监听器等,防止内存泄漏。对于动画效果,如果使用了一些需要清理的资源(如 CSS 动画的关键帧定义等),可以在这里进行处理。
- 代码示例:
import { createSignal, onMount, onCleanup } from'solid-js';
const FrequentUpdateList = () => {
const [list, setList] = createSignal([1, 2, 3]);
const addItem = () => {
setList([...list(), list().length + 1]);
};
onMount(() => {
// 初始化每个列表项的动画,例如添加初始动画类名
const listItems = document.querySelectorAll('.list-item');
listItems.forEach(item => item.classList.add('initial - animation'));
});
onCleanup(() => {
// 清理操作,例如移除动画类名
const listItems = document.querySelectorAll('.list-item');
listItems.forEach(item => item.classList.remove('initial - animation'));
});
return (
<div>
<button onClick={addItem}>Add Item</button>
<ul>
{list().map(item => (
<li key={item} className="list-item">
{item}
</li>
))}
</ul>
</div>
);
};
export default FrequentUpdateList;
在上述代码中:
onMount
函数在组件挂载到 DOM 后执行,给每个列表项添加了initial - animation
类名,实现初始动画效果。onCleanup
函数在组件从 DOM 中移除前执行,移除了initial - animation
类名,清理了动画相关的操作。这样可以避免在每次列表更新时重复添加和移除类名,提升性能。同时onCleanup
也防止了动画相关资源在组件卸载后还占用内存。