refactor: 将组件中的 onMount 替换为 Svelte 5 的 $effect
continuous-integration/drone/push Build is passing

This commit is contained in:
seahi committed 2026-09-24 11:55:29 +08:00
1 parent ebccc82757
commit fa38d81ab5
7 files changed
+12 -19

No files matched your search

+3 -7
View File
@@ -1,7 +1,6 @@
<script lang="ts"> <script lang="ts">
import { confirmState } from '$lib/stores/confirm.svelte'; import { confirmState } from '$lib/stores/confirm.svelte';
import { fade, scale } from 'svelte/transition'; import { fade, scale } from 'svelte/transition';
import { onMount, onDestroy } from 'svelte';
// Handle escape key to cancel // Handle escape key to cancel
function handleKeydown(e: KeyboardEvent) { function handleKeydown(e: KeyboardEvent) {
@@ -10,14 +9,11 @@
} }
} }
onMount(() => { $effect(() => {
window.addEventListener('keydown', handleKeydown); window.addEventListener('keydown', handleKeydown);
}); return () => {
onDestroy(() => {
if (typeof window !== 'undefined') {
window.removeEventListener('keydown', handleKeydown); window.removeEventListener('keydown', handleKeydown);
} };
}); });
</script> </script>
@@ -1,5 +1,5 @@
<script lang="ts"> <script lang="ts">
import { onMount, tick, untrack } from 'svelte'; import { tick, untrack } from 'svelte';
import MarkdownEditor from './MarkdownEditor.svelte'; import MarkdownEditor from './MarkdownEditor.svelte';
import MarkdownRenderer from '$lib/components/MarkdownRenderer.svelte'; import MarkdownRenderer from '$lib/components/MarkdownRenderer.svelte';
import OutlinePopover from './OutlinePopover.svelte'; import OutlinePopover from './OutlinePopover.svelte';
@@ -21,7 +21,7 @@
let preview: HTMLDivElement | undefined = $state(); let preview: HTMLDivElement | undefined = $state();
let previewHeadings: HTMLElement[] = []; let previewHeadings: HTMLElement[] = [];
let navigatingPreview = false; let navigatingPreview = false;
onMount(() => { $effect(() => {
const resume = () => { const resume = () => {
navigatingPreview = false; navigatingPreview = false;
}; };
+1 -2
View File
@@ -1,5 +1,4 @@
<script lang="ts"> <script lang="ts">
import { onMount } from 'svelte';
import { Calendar } from 'lucide-svelte'; import { Calendar } from 'lucide-svelte';
let { let {
@@ -37,7 +36,7 @@
} }
} }
onMount(() => { $effect(() => {
document.addEventListener('click', handleOutsideClick); document.addEventListener('click', handleOutsideClick);
return () => document.removeEventListener('click', handleOutsideClick); return () => document.removeEventListener('click', handleOutsideClick);
}); });
@@ -1,5 +1,4 @@
<script lang="ts"> <script lang="ts">
import { onMount } from 'svelte';
import Tabs from './Tabs.svelte'; import Tabs from './Tabs.svelte';
import ArticleOutline from './ArticleOutline.svelte'; import ArticleOutline from './ArticleOutline.svelte';
import type { EditorOutline } from '$lib/editor/outline.svelte'; import type { EditorOutline } from '$lib/editor/outline.svelte';
@@ -11,7 +10,7 @@
let narrow = $state(false); let narrow = $state(false);
const storageKey = 'blogflare.editor.sidebar'; const storageKey = 'blogflare.editor.sidebar';
let preferred = 'settings'; let preferred = 'settings';
onMount(() => { $effect(() => {
try { try {
const saved = localStorage.getItem(storageKey); const saved = localStorage.getItem(storageKey);
if (saved && ['settings', 'media', 'outline'].includes(saved)) preferred = saved; if (saved && ['settings', 'media', 'outline'].includes(saved)) preferred = saved;
@@ -2,7 +2,7 @@
/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-explicit-any */
import { addToast } from '$lib/stores/toast.svelte'; import { addToast } from '$lib/stores/toast.svelte';
import { onMount } from 'svelte';
import Tabs from './Tabs.svelte'; import Tabs from './Tabs.svelte';
let { let {
@@ -37,7 +37,7 @@
let hasMore = $state(true); let hasMore = $state(true);
let isLoadingLibrary = $state(false); let isLoadingLibrary = $state(false);
onMount(() => { $effect(() => {
if (!previewable || !pickerElement) return; if (!previewable || !pickerElement) return;
const selector = '[data-fancybox="featured-image-preview"]'; const selector = '[data-fancybox="featured-image-preview"]';
+1 -2
View File
@@ -3,7 +3,6 @@
import '../app.css'; import '../app.css';
let { children } = $props(); let { children } = $props();
import { onMount } from 'svelte';
import { page } from '$app/stores'; import { page } from '$app/stores';
let scrolled = $state(false); let scrolled = $state(false);
@@ -21,7 +20,7 @@
return `${days} 天 ${hours} 小时 ${minutes} 分钟`; return `${days} 天 ${hours} 小时 ${minutes} 分钟`;
} }
onMount(() => { $effect(() => {
const handleScroll = () => { const handleScroll = () => {
scrolled = window.scrollY > 50; scrolled = window.scrollY > 50;
}; };
+2 -2
View File
@@ -1,7 +1,7 @@
<script lang="ts"> <script lang="ts">
import { resolve } from '$app/paths'; import { resolve } from '$app/paths';
import { page } from '$app/stores'; import { page } from '$app/stores';
import { onMount } from 'svelte';
import { ExternalLink } from 'lucide-svelte'; import { ExternalLink } from 'lucide-svelte';
import Toast from '$lib/components/Toast.svelte'; import Toast from '$lib/components/Toast.svelte';
import ConfirmDialog from '$lib/components/ConfirmDialog.svelte'; import ConfirmDialog from '$lib/components/ConfirmDialog.svelte';
@@ -10,7 +10,7 @@
let scrolled = $state(false); let scrolled = $state(false);
onMount(() => { $effect(() => {
const handleScroll = () => { const handleScroll = () => {
scrolled = window.scrollY > 50; scrolled = window.scrollY > 50;
}; };