【发布时间】:2020-07-13 21:06:39
【问题描述】:
我正在通过创建简单的应用程序来学习 Svelte。
逻辑是使用类编写的。这个想法是,所需的所有数据都来自类实例属性。实例不应被多次实例化。我正在使用商店来提供此实例的组件。
问题是我无法使用这种方法获得反应。我尝试了可读可写存储,但没有任何帮助。仍然可以使用 OOP 获得反应性,我该怎么办?重新分配和创建新实例会很昂贵。
编辑
由于类太大,我无法在 REPL 中编写示例。
Parser.js
export default class Parser {
constructor() {
this._history = [];
}
parse(string) {
this._history.push(string)
}
get history() {
return this._history;
}
}
在这里我将实例传递给商店。
parserStore.js
import writable from "svelte/store";
import Parser from "Parser.js"
export const parserStore = writable(new Parser());
在这个组件中,我得到了实例并反应性地使用了一个方法。
Component_1.svelte*
import { parserStore } from "parserStore.js";
$: result = parserStore.parse(binded_input_value);
我想要得到的是使用类方法更新的最新历史属性:
Component_2.svelte
import { parserStore } from "parserStore.js";
$: history = parserStore.history;
{#each history as ... }
我知道,这不是最好的例子,但我想要的是通过商店提供的反应类实例。实际上这些值是最新的,但它不会导致组件的重新渲染。安装组件时 - 最新数据,但即使实例的属性发生更改,也不会重新渲染。
【问题讨论】:
-
我们需要看看你做了什么。在此处或在纤细的 REPL 上显示您的代码。
-
@AndreasDolk 我试图提供一些例子,希望对您有所帮助!
标签: javascript oop svelte svelte-3 svelte-store