IndexedDB 为什么只有一个Dexie查询在Svelte中更新?

ee7vknir  于 2022-12-09  发布在  IndexedDB
关注(0)|答案(1)|浏览(205)

我有一个svelte应用程序,它使用Dexie来实现数据持久性。在我的主组件中,我有一个子组件,它运行两个liveQuery来获取一个运动队的上一个和下一个赛程。然而,当时间推进时(这是一个体育管理模拟游戏),下一个赛程会React性地更新,而上一个赛程不会更新。
lastFixturesnextFixtures会传回该回合的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()
)

不过,这似乎并没有返回任何东西,所以任何关于这方面的指示也将不胜感激。

tv6aics1

tv6aics11#

如果您希望在$leagueRound存储更新时更新组件,则需要在liveQuery行中将let替换为$:。(当前为dexie@3.2.2或dexie@4.0.0-alpha.4)。除此之外,我无法解释为什么anyOf查询没有返回任何结果,或者第二个查询没有更新。
如果您在改用$:后仍有问题,请在Dexie.js github site上提交一个新的问题,并提供一个易于执行的副本(最好在codesandbox或类似的网站上)。

相关问题