【发布时间】:2020-09-21 03:14:15
【问题描述】:
我正在做一个论坛,所有消息都以某种方式相互链接。为了保存数据库读取,我将消息存储在 $messageStore 中作为 $messageStore[messageId]。 我正在使用 routify 的 $params 从 /message/id1 导航到 /message/id2 等,其中每个页面都包含 $params 中标识的消息,还有其他可能已经或可能不在商店中的链接消息。
我的问题是:
1st,组件没有卸载,所以当 $params 通过轻弹一个 1ms 的值来触发它时,它会禁用主组件的渲染并强制 init() 函数检查它需要在 DB 上获取的内容与否.. 这很丑陋,到目前为止它似乎工作,但我敢打赌这会失败,这取决于它运行的机器。
第二,在这样做之后,我遇到了一些我不明白的事情。 $messageStore 在页面更改时不会更改,但是突然之间我得到了很多未定义的值。似乎 $params 从 value1 变为 none 到 value2。 此外,如果我检查 init() 函数 if($messageStore[$params.id].someKey==="someValue"),它不会通过,尽管我确定它在商店中。
如果我这样做了
console.log($messageStore[$params.id].someKey)console.log($messageStore[$params.id].someKey==="someValue")if($messageStore[$params.id].someKey==="someValue"){console.log('passed')}else{console.log("failed")}
我明白了:
"someValue"
true
"failed"
这就像 console.log() 在执行时没有给出结果..
在使用 Routify 之前,我与 svelte-spa-router 拥有相同的东西,所以这可能是我在使用 svelte 和更改存储值和执行顺序时无法获得的东西..
我似乎找到了一种解决方法,方法是使用顶部组件中的作用域道具传递参数,该道具在页面更改时闪烁,但如果有人可以在那里教我一些东西,我将非常感激..
【问题讨论】:
标签: javascript store lifecycle reactive svelte