如何在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() 钩子。
Vue使用类和data 属性,采取了一种更加结构化的方法。
在使用这两种方法后,我发现Svelte是一种更类似于JavaScript的语法。
我们需要注意一件事,这一点很快就能学会:在改变数值时,我们也必须做一个赋值。
对于像字符串和数字这样的简单值来说,这主要是一个必然的结果,因为所有关于字符串的方法都会返回新的字符串,对于数字也是如此--它们是不可改变的。
但是对于数组呢?我们不能使用改变数组的方法。像push(),pop(),shift(),splice()... 因为没有赋值。它们改变了内部的数据结构,但Svelte无法检测到。
好吧,你仍然可以使用它们,但是在你完成你的操作之后,你要把变量重新赋值给它自己,像这样。
let list = [1, 2, 3]
list.push(4)
list = list
这有点违反直觉,但你很快就会记住它。
或者你可以使用使用传播操作符来进行操作。
let list = [1, 2, 3]
list = [...list, 4]