(3)svelte 教程:响应式
什么是 Reactive Value 和 Reactive Statement
Reactive Value(响应式值):
响应式值是指在 Svelte 中,当变量的值发生变化时,Svelte 会自动检测到变化并更新所有依赖于该变量的部分。这使得开发者可以轻松地管理状态,并让UI自动反映这些状态的变化。
Reactive Statement(响应式语句):
响应式语句是一种特殊的语法,通过 $:
前缀标识。当任何响应式语句中依赖的变量发生变化时,该语句会重新执行。这可以用来自动更新某些计算值或执行一些副作用(如日志记录)。
逐行解释代码
<script> export let name; let beltColour = "black"; let firstName = "Jimi"; let lastName = "Hend"; $: fullName = `${
firstName} ${
lastName}`; $: {
console.log(beltColour); console.log(fullName); } </script>
export let name;
- 声明一个名为
name
的变量,并将其导出,使其成为一个可由父组件传递的属性。name
是响应式的,当父组件改变name
的值时,Svelte 会自动更新使用name
的地方。
- 声明一个名为
let beltColour = "black";
- 声明一个名为
beltColour
的变量,并将其初始值设置为"black"
。这是一个响应式值,当beltColour
发生变化时,所有依赖它的地方都会自动更新。
- 声明一个名为
let firstName = "Jimi";
- 声明一个名为
firstName
的变量,并将其初始值设置为"Jimi"
。这是一个响应式值。
- 声明一个名为
let lastName = "Hend";
- 声明一个名为
lastName
的变量,并将其初始值设置为"Hend"
。这是一个响应式值。
- 声明一个名为
$: fullName = \
${firstName} ${lastName}`;`- 使用
$:
前缀声明一个响应式语句,计算fullName
的值。当firstName
或lastName
发生变化时,这个语句会重新执行,更新fullName
的值。
- 使用
$: { console.log(beltColour); console.log(fullName); }
- 这是一个块级的响应式语句,当任意依赖的响应式值发生变化时,整个块会重新执行。这里会打印
beltColour
和fullName
的当前值。当beltColour
或fullName
发生变化时,控制台会显示相应的日志信息。
- 这是一个块级的响应式语句,当任意依赖的响应式值发生变化时,整个块会重新执行。这里会打印
<main> <h1>Hello {name}!</h1> <p style="color: {
beltColour}">{fullName} {beltColour} belt</p> <input type="text" bind:value={firstName}> <input type="text" bind:value={lastName}> <input type="text" bind:value={beltColour}> </main>
部分
<h1>Hello {name}!</h1>
- 一个 HTML
<h1>
素,使用{name}
表达式将name
变量的值插入到标题中。当name
变量的值变化时,标题会自动更新。
- 一个 HTML
<p style="color: {beltColour}">{fullName} {beltColour} belt</p>
- 一个 HTML
<p>
素,使用{fullName}
和{beltColour}
表达式将fullName
和beltColour
变量的值插入到段落中,同时将beltColour
作为段落文本的颜色样式。当fullName
或beltColour
变量的值变化时,段落的内容和样式会自动更新。
- 一个 HTML
<input type="text" bind:value={firstName}>
- 一个 HTML
<input>
素,类型为文本输入框。使用bind:value
语法将输入框的值与firstName
变量进行双向绑定。当用户在输入框中输入内容时,firstName
变量会自动更新;反之,当firstName
变量的值变化时,输入框的内容也会自动更新。
- 一个 HTML
<input type="text" bind:value={lastName}>
- 一个 HTML
<input>
素,类型为文本输入框。使用bind:value
语法将输入框的值与lastName
变量进行双向绑定。其行为与firstName
的输入框相同。
- 一个 HTML
<input type="text" bind:value={beltColour}>
- 一个 HTML
<input>
素,类型为文本输入框。使用bind:value
语法将输入框的值与beltColour
变量进行双向绑定。当用户在输入框中输入内容时,beltColour
变量会自动更新;反之,当beltColour
变量的值变化时,输入框的内容也会自动更新。
- 一个 HTML
这个 Svelte 组件展示了如何使用响应式值和响应式语句来管理状态,并让 UI 根据数据的变化自动更新。
APP.svelte 完整代码如下:
<script> export let name; let beltColour = "black"; let firstName = "Jimi"; let lastName = "Hend"; $: fullName = `${
firstName} ${
lastName}`; // $: console.log(beltColour); $: {
console.log(beltColour); console.log(fullName); } // const handleClick = () => {
// beltColour = "orange"; // }; // const handleInput = (e) => {
// beltColour = e.target.value; // }; </script> <main> <h1>Hello {
name}!</h1> <p style="color: {beltColour}">{
fullName} {
beltColour} belt</p> <!-- <button on:click={
handleClick}>update belt colour</button> --> <!-- <input type="text" on:input={
handleInput} value={
beltColour}> --> <input type="text" bind:value={
firstName}> <input type="text" bind:value={
lastName}> <input type="text" bind:value={
beltColour}> </main> <style> main {
text-align: center; padding: 1em; max-width: 240px; margin: 0 auto; } h1 {
color: #ff3e00; text-transform: uppercase; font-size: 4em; font-weight: 100; } @media (min-width: 640px) {
main {
max-width: none; } } </style>
今天的文章
(3)svelte 教程:响应式分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/82017.html