我有三个与这个问题有关的文件。一个是组件文件,一个是JS库文件,另一个是存储文件。
存储文件:
import { writable } from "svelte/store";
export const appStore = writable({
currentPage : '',
});图书馆档案:
import { appStore } from "../stores/appStore";
let store;
appStore.subscribe(data => {
store = data;
});
export async function post() {
console.log(store);
}最后,组件文件:
import { test } from '$lib/req_utils';
import { appStore } from "../../stores/AppStore";
appStore.update(store => {
store.currentPage = 'login';
return store;
});
function handleLogin() {
test();
}基本上,当加载组件文件时,存储中的currentPage设置为‘登录’,当handleLogin事件被删除时。在我的库JS中调用测试函数,库JS将输出appStore.currentPage的值--它正确地是‘登录’。
但是,当我尝试在组件文件中使用自动订阅时,如下所示:
import { test } from '$lib/req_utils';
import { appStore } from "../../stores/AppStore";
$appStore.currentPage = 'login';
function handleLogin() {
test();
}商店似乎没有得到更新(在检查库JS中test()中的值时)
根据我看过的文档和教程,上面应该是工作的吗?
发布于 2022-01-01 11:22:25
因为Svelte反应性是基于赋值的,因此为对象的属性分配值并不会触发该反应性。然而,我已经在Svelte中建立了你的案例的演示和它似乎工作得很好。
也许这和测试功能有关?我不得不说,这对我来说似乎很奇怪,因为您声称update方法确实有效。
关于导致问题的其他一些想法是,在某个地方,currentPage属性正在被重新调整。或者,在编写测试函数的方式上,store变量绑定在初始化上。无论哪种方式,我都认为使用update和$应该是相同的。
这个GitHub问题可能有相关的信息,但我什么也没找到。
https://stackoverflow.com/questions/70489586
复制相似问题