Используйте синтаксис метки JS $: без. Невозможно получить доступ ‹obj› перед ошибкой инициализации

Я использую этот код в своем приложении Svelte:

<script>
  import { query } from '@urql/svelte'

  import { MY_QUERY } from 'queries'

  $: myQuery = query({
    query: MY_QUERY,
    variables: { id }
  })
</script>

{#if !$myQuery}
  Loading...
{:else}
  Oh WOW! {$myQuery.data}
{/if}

Пробуя тот же код в Sapper, я получаю эту ошибку:

Cannot access 'myQuery' before initialization.

Если я изменю строку ниже

  • из этого: $: myQuery = query({

  • на это: const myQuery = query({

оно работает!

Почему?


person Fred Hors    schedule 01.05.2020    source источник
comment
Предупреждение для отвечающих: код Svelte не является чистым кодом JavaScript, Svelte имеет этап компиляции. Эта $ вещь, которую вы видите, является реактивным объявлением. (Хотя да, это ярлык JavaScript, это не его основная цель выше.)   -  person T.J. Crowder    schedule 01.05.2020


Ответы (1)


Поскольку это код Sapper, и я не вижу ничего очевидного, думаю, вы напустили дурака на этот эта ошибка. Ошибка возникает только на стороне сервера (SSR), не так ли?

Тогда обходной путь - указать компилятору объявить переменную в нужном месте:

  let myQuery // <=== add this

  $: myQuery = query({
    query: MY_QUERY,
    variables: { id }
  })
person rixo    schedule 01.05.2020