我有一个svelte
应用程序,它使用Dexie
来实现数据持久性。在我的主组件中,我有一个子组件,它运行两个liveQuery
来获取一个运动队的上一个和下一个赛程。然而,当时间推进时(这是一个体育管理模拟游戏),下一个赛程会React性地更新,而上一个赛程不会更新。lastFixtures
和nextFixtures
会传回该回合的10个灯具数组。
在filter
函数中,我硬编码了我现在使用的团队的ID,这是一项正在进行的工作。FixtureSummary.svelte
<script>
import { liveQuery } from 'dexie'
import { db } from '../../db'
import { leagueRound } from '../../store'
let lastFixtures = liveQuery(() =>
db
.fixtures
.get($leagueRound - 1)
)
let nextFixtures = liveQuery(() =>
db
.fixtures
.get($leagueRound)
)
$: lastFixture = $lastFixtures?.fixtures.filter(f => f.home.id === 15 || f.away.id === 15)[0]
$: nextFixture = $nextFixtures?.fixtures.filter(f => f.home.id === 15 || f.away.id === 15)[0]
</script>
<div>
<h3>Last Fixture</h3>
{#if lastFixture}
<p>{lastFixture.home.name} {lastFixture.homeGoals} - {lastFixture.awayGoals} {lastFixture.away.name}</p>
{:else}
<p>N/A</p>
{/if}
<h3>Next Fixture</h3>
{#if nextFixture}
<p>{nextFixture.home.name} vs {nextFixture.away.name}</p>
{:else}
<p>N/A</p>
{/if}
</div>
**问题:**为什么在组件视图中只有一个查询更新?
作为第二个问题,我尝试在一个查询中同时获取上一个和下一个fixture,如下所示:
liveQuery(() =>
db
.fixtures
.where('id')
.anyOf([$leagueRound - 1, $leagueRound])
.toArray()
)
不过,这似乎并没有返回任何东西,所以任何关于这方面的指示也将不胜感激。
1条答案
按热度按时间tv6aics11#
如果您希望在
$leagueRound
存储更新时更新组件,则需要在liveQuery行中将let
替换为$:
。(当前为dexie@3.2.2或dexie@4.0.0-alpha.4)。除此之外,我无法解释为什么anyOf查询没有返回任何结果,或者第二个查询没有更新。如果您在改用
$:
后仍有问题,请在Dexie.js github site上提交一个新的问题,并提供一个易于执行的副本(最好在codesandbox或类似的网站上)。