HTML doesn't have a way of expressing logic, like conditionals and loops. Svelte does.
To conditionally render some markup, we wrap it in an if
block:
{#if user.loggedIn}
<button on:click={toggle}> Log out </button>
{/if}
{#if !user.loggedIn}
<button on:click={toggle}> Log in </button>
{/if}
Try it — update the component, and click on the buttons.
App.svelte
99
1
2
3
4
5
6
7
8
9
10
11
12
›
⌄
⌄
<script>
let user = { loggedIn: false };
function toggle() {
user.loggedIn = !user.loggedIn;
}
</script>
<button on:click={toggle}> Log out </button>
<button on:click={toggle}> Log in </button>
99
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
›
⌄
⌄
⌄
⌄
⌄
⌄
⌄
⌄
⌄
⌄
⌄
⌄
/* App.svelte generated by Svelte v4.2.19 */
import {
SvelteComponent,
detach,
element,
init,
insert,
listen,
noop,
run_all,
safe_not_equal,
space
} from "svelte/internal";
import "svelte/internal/disclose-version";
function create_fragment(ctx) {
let button0;
let t1;
let button1;
let mounted;
let dispose;
return {
c() {
button0 = element("button");
button0.textContent = "Log out";
t1 = space();
button1 = element("button");
button1.textContent = "Log in";
},
m(target, anchor) {
insert(target, button0, anchor);
insert(target, t1, anchor);
insert(target, button1, anchor);
if (!mounted) {
dispose = [
listen(button0, "click", /*toggle*/ ctx[0]),
listen(button1, "click", /*toggle*/ ctx[0])
];
mounted = true;
}
},
p: noop,
i: noop,
o: noop,
d(detaching) {
if (detaching) {
detach(button0);
detach(t1);
detach(button1);
}
mounted = false;
run_all(dispose);
}
};
}
function instance($$self) {
let user = { loggedIn: false };
function toggle() {
user.loggedIn = !user.loggedIn;
}
return [toggle];
}
class App extends SvelteComponent {
constructor(options) {
super();
init(this, options, instance, create_fragment, safe_not_equal, {});
}
}
export default App;
result = svelte.compile(source, {
generate:
css:
});9
1
›
/* Add a <style> tag to see compiled CSS */