Получить вложенные данные из хранилища URLQ Svelte — Не удается прочитать свойство

#svelte #svelte-store

#стройная #стройный магазин

Вопрос:

С помощью URLQ, получившего сообщение из GraphCMS — URLQ создает магазин, который выглядит следующим образом:

 {  "stale": false,  "fetching": false,  "data": {  "post": {  "title": "Technical SEO with GraphCMS",  "date": "2020-05-05",  "tags": [  "SEO"  ],  "content": {  "html": "lt;pgt;Lorem ipsum dolor sit ametlt;/pgt;",  "__typename": "RichText"  },  "coverImage": {  "url": "https://media.graphcms.com/resize=fit:clip,width:600/hujVF2oRi2J1gDKdk0ic",  "__typename": "Asset"  },  "__typename": "Post"  }  } }  

Я хотел бы выделить часть после переменной post.

Когда я пытаюсь получить доступ к нему с помощью: $post.data, все работает нормально, но я все еще получаю переменную «post» на выходе.
В тот момент, когда я использую $post.data.post, я получил 500 ошибок — Не удается прочитать свойство «post» неопределенного

Как получить доступ к этому вложенному значению?

Комментарии:

1. Что произойдет, если вы распространите копию значения хранилища внутри такого объекта ? const {data} = $post

Ответ №1:

Ошибка, скорее всего, вызвана тем, что вы пытаетесь прочитать $post.data.post до того, как (асинхронный) запрос фактически завершится.

Попробуйте добавить условное условие, что-то вроде этого, например:

 $: postData = $post.fetching ? undefined : $post.data.post  

В качестве альтернативы вы можете попробовать использовать дополнительную цепочку, если ваш проект настроен на использование ES11:

 $: postData = $post.data?.post  

хотя я считаю, что первый подход, приведенный выше, лучше, поскольку он лучше выражает намерение и более читаем.