You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: sites/svelte-5-preview/src/routes/docs/content/03-appendix/02-breaking-changes.md
+12-2
Original file line number
Diff line number
Diff line change
@@ -9,17 +9,23 @@ While Svelte 5 is a complete rewrite, we have done our best to ensure that most
9
9
In Svelte 3 and 4, components are classes. In Svelte 5 they are functions and should be instantiated differently. If you need to manually instantiate components, you should use `mount` or `createRoot` (imported from `svelte`) instead. If you see this error using SvelteKit, try updating to the latest version of SvelteKit first, which adds support for Svelte 5. If you're using Svelte without SvelteKit, you'll likely have a `main.js` file (or similar) which you need to adjust:
10
10
11
11
```diff
12
-
+ import { mount } from 'svelte';
12
+
+ import { createRoot } from 'svelte';
13
13
import App from './App.svelte'
14
14
15
15
- const app = new App({ target: document.getElementById("app") });
`createRoot` returns an object with a `$set` and `$destroy` method on it. It does not come with an `$on` method you may know from the class component API. Instead, pass them via the `events` property on the options argument. If you don't need to interact with the component instance after creating it, you can use `mount` instead, which saves some bytes.
22
+
23
+
> Note that using `events` is discouraged — instead, [use callbacks](https://svelte-5-preview.vercel.app/docs/event-handlers)
24
+
21
25
As a stop-gap-solution, you can also use `createClassComponent` or `asClassComponent` (imported from `svelte/legacy`) instead to keep the same API after instantiating. If this component is not under your control, you can use the `legacy.componentApi` compiler option for auto-applied backwards compatibility (note that this adds a bit of overhead to each component).
22
26
27
+
### Server API changes
28
+
23
29
Similarly, components no longer have a `render` method when compiled for server side rendering. Instead, pass the function to `render` from `svelte/server`:
24
30
25
31
```diff
@@ -32,6 +38,10 @@ import App from './App.svelte';
32
38
33
39
`render` also no longer returns CSS; it should be served separately from a CSS file.
34
40
41
+
### bind:this changes
42
+
43
+
Because components are no longer classes, using `bind:this` no longer returns a class instance with `$set`, `$on` and `$destroy` methods on it. It only returns the instance exports (`export function/const`) and, if you're using the `accessors` option, a getter/setter-pair for each property.
44
+
35
45
## Whitespace handling changed
36
46
37
47
Previously, Svelte employed a very complicated algorithm to determine if whitespace should be kept or not. Svelte 5 simplifies this which makes it easier to reason about as a developer. The rules are:
0 commit comments