Javascript 是否可以从外部js文件访问Svelte store?

Javascript 是否可以从外部js文件访问Svelte store?,javascript,svelte,svelte-store,Javascript,Svelte,Svelte Store,我想知道我是否能够从一个普通的.js文件中访问我的Svelte存储值 我试图编写基于存储值返回动态值的函数,以便在任何组件中导入它们。 但是在一个普通的.js文件中,我不能仅仅用$符号访问存储值 使用存储值并可用于多个组件的基本函数的快速示例: //in .svelte function add() { $counter = $counter + 1; } 编辑:重新措辞一点 编辑: 找到了一个解决方案,但我不知道它是否真的优化了 //in .js file import { g

我想知道我是否能够从一个普通的.js文件中访问我的Svelte存储值

我试图编写基于存储值返回动态值的函数,以便在任何组件中导入它们。 但是在一个普通的.js文件中,我不能仅仅用$符号访问存储值

使用存储值并可用于多个组件的基本函数的快速示例:

//in .svelte

function add() {
    $counter = $counter + 1;
 }
编辑:重新措辞一点

编辑: 找到了一个解决方案,但我不知道它是否真的优化了

//in .js file

import { get } from "svelte/store";
import { counter } from "./stores";

export function add() {
    var counterRef = get(counter);
    counter.set(counterRef + 1);
}
是的,绝对是

首先,store API非常简单,没有什么可以阻止您自己订阅store以了解其价值:

从“/stores”导入myStore
订阅(值=>{
//用新的价值观做一些事情
//你可以把它保存起来以备将来参考。。。
})
而且,如果您只想知道当前值,Svelte有一个助手,该函数:

从'svelte/store'导入{get};
从“/stores”导入myStore
const value=get(myStore);

除了rixo的答案之外,实现
添加
的更好方法是使用商店的
更新
方法:

从“/stores”导入{counter};
导出函数add(){
计数器更新(n=>n+1);
}

您还可以创建一个实现该逻辑的方法。

这并不完全是您要求的(导入),但此方法具有相同的用途: 您将存储作为参数传递,因此无需在.js中导入存储

import {get} from 'svelte/store'
export function add(yourStore) {
   let _yourStore = get(yourStore)
   yourStore.set(_yourStore + 1)
}
然后,您只需在苗条组件中导入存储。

它允许您不必关心.js中的商店导入,而只关心组件上的商店导入。

许多苗条的商店示例都不使用对象,所以下面是我如何让它工作的。这使用异步获取将用户的区域设置更新为
0
。想象一下
pstats={uid:1,locale:5}

从“/stores.js”导入{pstats}

export async function leave_locale() {
   return fetch(`./builds/leave`, {method: 'get'})
          .then(res => res.json())
          .then(res => {
                pstats.update((theStore) => {
                    return Object.assign(theStore, {locale: 0});
                })
            })
}

哦,非常感谢!subscribe方法对我来说更有效:)get()方法触发了我的大脑,解决了我的问题。非常感谢。