如何处理Svelte中的状态更新

251 阅读1分钟

如何在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]