首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Svelte -商店自动订阅-值不被更新

Svelte -商店自动订阅-值不被更新
EN

Stack Overflow用户
提问于 2021-12-26 20:23:08
回答 1查看 381关注 0票数 0

我有三个与这个问题有关的文件。一个是组件文件,一个是JS库文件,另一个是存储文件。

存储文件:

代码语言:javascript
复制
import { writable } from "svelte/store";

export const appStore = writable({
    currentPage : '',
});

图书馆档案:

代码语言:javascript
复制
import { appStore } from "../stores/appStore";

let store;

appStore.subscribe(data => {
    store = data;
});

export async function post() {
    console.log(store);
}

最后,组件文件:

代码语言:javascript
复制
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的值--它正确地是‘登录’。

但是,当我尝试在组件文件中使用自动订阅时,如下所示:

代码语言:javascript
复制
import { test } from '$lib/req_utils';
import { appStore } from "../../stores/AppStore";

$appStore.currentPage = 'login';

function handleLogin() {
    test();
}

商店似乎没有得到更新(在检查库JS中test()中的值时)

根据我看过的文档和教程,上面应该是工作的吗?

EN

回答 1

Stack Overflow用户

发布于 2022-01-01 11:22:25

因为Svelte反应性是基于赋值的,因此为对象的属性分配值并不会触发该反应性。然而,我已经在Svelte中建立了你的案例的演示和它似乎工作得很好。

也许这和测试功能有关?我不得不说,这对我来说似乎很奇怪,因为您声称update方法确实有效。

关于导致问题的其他一些想法是,在某个地方,currentPage属性正在被重新调整。或者,在编写测试函数的方式上,store变量绑定在初始化上。无论哪种方式,我都认为使用update$应该是相同的。

这个GitHub问题可能有相关的信息,但我什么也没找到。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70489586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档