svelte-reactive-assignments

在 Svelte 中處理狀態更新 如何使用 Svelte 中的反應式賦值來處理組件內的狀態更新 Svelte 的一個很棒的地方是,你不需要做任何特殊的事情來更新組件的狀態。 你只需要一個賦值操作。 假設你有一個 count 變量。你可以用 count = count + 1 或者 count++ 來對其進行增加: <script> let count = 0 const incrementCount = () => { count++ } </script> {count} <button on:click={incrementCount}>+1</button> 如果你對現代 Web 框架如何處理狀態更新的方式不熟悉的話,這沒有什麼突破性的。但是在 React 中,你需要調用 this.setState() 或使用 useState() hook。 Vue 則採取了一種更結構化的方法,使用類和 data 屬性。 在使用過這兩種方式之後,我發現 Svelte 更像是一種更接近 JavaScript 的語法。 有一件事我們需要注意到,這很容易學到:在更改值時,我們也必須進行賦值。 對於像字符串和數字這樣的簡單值,這通常是理所當然的,因為字符串的所有方法都返回新的字符串,數字也是如此 - 它們是不可變的。 但是對於數組呢?我們不能使用修改數組的方法,比如 push()、pop()、shift()、splice()…,因為沒有賦值的操作。它們改變了內部的數據結構,但是 Svelte 無法檢測到這一點。 嗯,你仍然可以使用它們,但是在進行操作之後,你需要將變量重新賦值給它自身,像這樣: let list = [1, 2, 3] list....

Svelte模板:條件邏輯

學習如何在Svelte中使用模板,特別是如何使用條件語句。 任何一個好的Web模板語言都至少提供了兩樣東西:條件結構和循環。 Svelte也不例外,在本篇文章中,我將介紹條件結構。 您希望能夠查看一個值/表達式,如果它指向一個真值,則執行某些操作;如果它指向一個假值,則執行其他操作。 Svelte提供了一組非常強大的控制結構。 首先是if: {#if isRed} <p>紅色</p> {/if} 有一個開始標記{#if}和一個結束標記{/if}。開始標記檢查一個值或語句是否為真值。在這個例子中,isRed可以是一個具有true值的布爾值: <script> let isRed = true </script> 一個空字符串是假值,但帶有內容的字符串是真值。 0是假值,但大於0的數字是真值。 布爾值true是真值,當然,false是假值。 如果開始標記的條件不滿足(提供了一個假值),則不會發生任何事情。 如果條件不滿足,需要執行其他操作,我們可以使用適當命名的else語句: {#if isRed} <p>紅色</p> {:else} <p>不是紅色</p> {/if} 在模板中,要麼渲染第一個代碼塊,要麼渲染第二個代碼塊。沒有其他選項。 您可以在if塊條件中使用任何JavaScript表達式,因此可以使用!運算符對一個選項進行取反: {#if !isRed} <p>不是紅色</p> {:else} <p>紅色</p> {/if} 現在,在else內部,您可能還想檢查其他條件。這就是{:else if somethingElse}語法的用法: {#if isRed} <p>紅色</p> {:else if isGreen} <p>綠色</p> {:else} <p>既不是紅色也不是綠色</p> {/if} 您可以擁有多個這樣的代碼塊,不僅僅是一個,並且可以對它們進行嵌套。以下是一個更複雜的示例: {#if isRed} <p>紅色</p> {:else if isGreen} <p>綠色</p> {:else if isBlue} <p>它是藍色</p> {:else} {#if isDog} <p>它是一隻狗</p> {/if} {/if}

Svelte模板:循環

學習如何在Svelte模板中使用循環 在Svelte模板中,你可以使用{#each}{/each}語法創建循環: <script> let goodDogs = ['Roger', 'Syd'] </script> {#each goodDogs as goodDog} <li>{goodDog}</li> {/each} 如果你熟悉其他使用模板的框架,這個語法非常相似。 你可以通過以下方式獲取迭代的索引: <script> let goodDogs = ['Roger', 'Syd'] </script> {#each goodDogs as goodDog, index} <li>{index}: {goodDog}</li> {/each} (索引從0開始) 在動態編輯列表時,刪除和添加元素時,總是應該在列表中傳遞一個標識符,以防止出現問題。 你可以通過以下語法來實現: <script> let goodDogs = ['Roger', 'Syd'] </script> {#each goodDogs as goodDog (goodDog)} <li>{goodDog}</li> {/each} <!-- 同時使用索引 --> {#each goodDogs as goodDog, index (goodDog)} <li>{goodDog}</li> {/each} 你也可以傳遞一個對象,但如果你的列表中每個元素都有唯一的標識符,最好使用它: <script> let goodDogs = [ { id: 1, name: 'Roger'}, { id: 2, name: 'Syd'} ] </script> {#each goodDogs as goodDog (goodDog....

Swift 中的分號

本教程屬於 Swift 系列。 在 Swift 中,分號是可選的。 您可以將語句寫在不同行上,並且不需要添加分號: let list = ["a", "b", "c"] var a = 2 您可以添加分號,但在這種情況下並沒有任何實際意義: let list = ["a", "b", "c"]; var a = 2; 但是,如果您想在同一行上寫多個語句,那麼您需要添加分號: var a = 2; let b = 3

Swift 中的布林值

本教程屬於 Swift 系列 Swift 提供 Bool 類型,可以有兩個值:true 和 false。 var done = false done = true 布林值在條件控制結構中特別有用,比如 if 陳述式或三元條件運算符: var done = true if done == true { //code }

Swift 中的字串

本教程屬於 Swift 系列 字串是程式設計中最常用的工具之一。 在 Swift 中,可以使用字串文字語法來定義一個字串: let name = "Roger" 我們使用雙引號來定義字串。單引號是不合法的字串界定符。 一個字串可以跨越多行,使用三個雙引號: let description = """ a long long long description """ 你可以使用字串插補 (string interpolation) 在字串中嵌入表達式: let age = 8 let name = """ Roger, 年齡 \(age) 明年他將會是 \(age + 1) 歲 """ 使用 + 運算子來連接兩個字串: var name = "Roger" name = name + " The Dog" 使用 += 運算子將文字附加到字串: var name = "Roger" name += " The Dog" 或者使用 append(_:) 方法:...

Swift 中的陣列

本教程屬於 Swift 系列 我們使用陣列來創建一組項目。 在這個例子中,我們創建了一個包含 3 個整數的陣列: var list = [1, 2, 3] 我們可以使用 list[0] 的語法來訪問第一個項目,使用 list[1] 訪問第二個項目,以此類推。 在 Swift 中,陣列中的元素必須具有相同的類型。 如果在聲明時初始化陣列,則可以推斷出類型,就像上面的例子一樣。 否則,必須聲明陣列可以包含的值的類型,方式如下: var list: [Int] = [] 另一種簡寫語法是: var list = [Int]() 您也可以在初始化時明確指定類型,例如: var list: [Int] = [1, 2, 3] 初始化陣列的快速方法是使用範圍運算符: var list = Array(1...4) //[1, 2, 3, 4] 要獲取陣列中的項目數量,使用 count 屬性: var list = [1, 2, 3] list.count //3 如果陣列為空,則其 isEmpty 屬性為 true。 var list = [1, 2, 3] list....

Swift 中的數字

此教程屬於 Swift 系列。 在 Swift 中,數字擁有兩種主要類型:Int 和 Double。 Int 是一個沒有小數點的整數。 Double 是一個帶有小數點的數字。 它們都使用 64 位元,在現代使用 64 位元的電腦上,以及在 32 位元平台上使用 32 位元。 它們可以存儲的值的範圍取決於所使用的平台,並可以通過每種類型的 int 屬性獲取: 此外,除了 Int 和 Double,我們還有許多其他數值類型,主要用於與以前構建的需要與 C 或 Objective-C 交互的 API 進行交互,你必須知道它們: Int8 是一個佔用 8 位元的整數 Int16 是一個佔用 16 位元的整數 Int32 是一個佔用 32 位元的整數 Int64 是一個佔用 64 位元的整數 UInt8 是一個佔用 8 位元的無符號整數 UInt16 是一個佔用 16 位元的無符號整數 UInt32 是一個佔用 32 位元的無符號整數 UInt64 是一個佔用 64 位元的無符號整數 UInt 與 Int 相似,但是它是無符號的,範圍從 0 到 Int....

Swift 元組

本教程屬於 Swift 系列。 元組用於將多個值分組成一個集合。例如,我們可以聲明一個包含 String 和 Int 值的變量 dog: let dog: (String, Int) 然後我們可以用名字和年齡來初始化它們: let dog: (String, Int) = ("Roger", 8) 但是與任何其他變量一樣,類型可以在初始化期間推斷出來: let dog = ("Roger", 8) 您可以使用命名元素: let dog = (name: "Roger", age: 8) dog.name //"Roger" dog.age //8 一旦定義了一個元組,您可以以以下方式將其解構到單個變量中: let dog = ("Roger", 8) let (name, age) = dog 如果您只需要獲取其中一個值,可以使用特殊的底線關鍵字忽略其他值: let dog = ("Roger", 8) let (name, _) = dog 元組是一個非常有用的工具,可以滿足各種需求。 最明顯的一個需求是以簡潔的方式分組相似的數據。 另一個需求是從函數返回多個項目。函數只能返回單個項目,因此元組是一種方便的結構。 另一個元組所允許的有用功能是交換元素: var a = 1 var b = 2 (a, b) = (b, a) // a == 2 // b == 1

Swift 列舉

本教程屬於 Swift 系列教程 列舉是一種將不同選項分組在一個共同名稱下的方式。 示例: enum Animal { case dog case cat case mouse case horse } 這個 Animal 列舉現在是一個類型。 這種類型的值只能是列出的其中一個選項。 如果你定義一個 Animal 類型的變數: var animal: Animal 你可以稍後使用這種語法決定要給它賦予哪個值: var animal: Animal animal = .dog 我們可以在 switch 控制結構中使用列舉: enum Animal { case dog case cat case mouse case horse } let animal = Animal.dog switch animal { case .dog: print("dog") case .cat: print("cat") default: print("another animal") } 列舉的值可以是字符串、字符或數字。 您還可以在一個線上定義一個列舉: enum Animal { case dog, cat, mouse, horse } 您還可以在列舉中添加類型聲明,並為每個選項分配該類型的值:...