Skip to content

Commit 1049b06

Browse files
committed
feat(makeMeta): 优化 meta 元素的创建和移除逻辑
- 改进 meta 元素的创建方式,确保每次调用时只创建一次 - 添加组件卸载时移除 meta 元素的逻辑,避免内存泄漏 - 优化 createEffect 中的更新逻辑,增加对 meta 元素存在性的判断
1 parent 77a6117 commit 1049b06

1 file changed

Lines changed: 10 additions & 7 deletions

File tree

src/hooks/makeMeta.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
1-
import { type Accessor, createEffect } from 'solid-js';
1+
import { type Accessor, createEffect, onCleanup } from 'solid-js';
22

33
export function makeMeta(name: string, content: Accessor<string>) {
4-
let metaElement = document.querySelector<HTMLMetaElement>(`meta[name="${name}"]`);
5-
if (!metaElement) {
6-
metaElement = document.createElement('meta');
7-
metaElement.name = name;
8-
document.head.appendChild(metaElement);
9-
}
4+
let metaElement: HTMLMetaElement | undefined = document.createElement('meta');
5+
metaElement.name = name;
6+
document.head.appendChild(metaElement);
7+
onCleanup(() => {
8+
if (!metaElement) return;
9+
document.head.removeChild(metaElement);
10+
metaElement = undefined;
11+
});
1012
// Meta 组件不稳定,所以需要手动更新
1113
createEffect(() => {
14+
if (!metaElement) return;
1215
metaElement.content = content();
1316
});
1417
}

0 commit comments

Comments
 (0)