Skip to main content

Part 1 / Reactivity / Updating arrays and objects

Svelte のリアクティビティは代入によってトリガーされるため、pushsplice のような配列のメソッドを使用しても更新が自動的に行われません。例えば、'Add a number' ボタンをクリックしても今のところ何も起こりません。

これを修正する方法の1つとして、冗長に見えるかもしれませんが、代入を追加することです。

function addNumber() {
	numbers.push(numbers.length + 1);
	numbers = numbers;
}

もう少し慣用的な解決策もあります。

function addNumber() {
	numbers = [...numbers, numbers.length + 1];
}

同様のパターンで、popshiftunshiftsplice を置き換えることができます。

配列やオブジェクトの プロパティ への代入(例:obj.foo += 1array[i] = x)は値自体への代入と同じように動作します。

function addNumber() {
	numbers[numbers.length] = numbers.length + 1;
}

大まかなまとめ: 更新される変数の名前は、代入の左側に置かなければならない。例えばこれは…

const foo = obj.foo;
foo.bar = 'baz';

obj.foo.bar に対するリアクティビティはトリガーされません。もしトリガーしたければ、obj = obj を続けて書く必要があります。

Next: Props

initialising