Svelte 中订阅商店的值发生变化时如何触发功能?
How to trigger a function when there is a value change in subscribed store in Svelte?
我的一个组件订阅了商店中的一个变量。每当该存储变量发生变化时,我都想触发一个函数。
stores.js
import { writable } from "svelte/store";
export const comparedProducts = writable([1,2,3]);
Component.svelte
import { comparedProducts } from "../stores.js";
//if there is a change in $comparedProducts trigger this function eg. ([1,2])
const someFunction = () => {
//do something
}
在componenet.svelte
import { comparedProducts } from "../stores.js";
//if there is a change in $comparedProducts trigger this function eg. ([1,2])
const someFunction = () = >{
// do something
}
// stores can be subscribed to using .subscribe()
// each new value will trigger the callback supplied to .subscribe()
let unsubscribeStore = comparedProducts.subscribe((currentValue) => {
//currentValue == $comparedProducts
someFunction()
})
// call unsubscribeStore() after finishing to stop listening for new values
找到更清洁的解决方案
import { comparedProducts } from "../stores.js";
$: $comparedProducts, run();
function run(){
//do something here
}
更多细节和工作Repl演示计数器。
store.js
import { writable } from "svelte/store";
export const count = writable(0);
Component.svelte
import { count } from "../store.js";
$: if($count > 0) { foo($count) }
function foo($count) {
console.log($count)
}
我的一个组件订阅了商店中的一个变量。每当该存储变量发生变化时,我都想触发一个函数。
stores.js
import { writable } from "svelte/store";
export const comparedProducts = writable([1,2,3]);
Component.svelte
import { comparedProducts } from "../stores.js";
//if there is a change in $comparedProducts trigger this function eg. ([1,2])
const someFunction = () => {
//do something
}
在componenet.svelte
import { comparedProducts } from "../stores.js";
//if there is a change in $comparedProducts trigger this function eg. ([1,2])
const someFunction = () = >{
// do something
}
// stores can be subscribed to using .subscribe()
// each new value will trigger the callback supplied to .subscribe()
let unsubscribeStore = comparedProducts.subscribe((currentValue) => {
//currentValue == $comparedProducts
someFunction()
})
// call unsubscribeStore() after finishing to stop listening for new values
找到更清洁的解决方案
import { comparedProducts } from "../stores.js";
$: $comparedProducts, run();
function run(){
//do something here
}
更多细节和工作Repl演示计数器。
store.js
import { writable } from "svelte/store";
export const count = writable(0);
Component.svelte
import { count } from "../store.js";
$: if($count > 0) { foo($count) }
function foo($count) {
console.log($count)
}