2017-05-28 5 views
0

httpリクエストからのデータを正常に動作しているコンポーネントにレンダリングしようとしましたが、データがフェッチされている間にnullであるという問題があります。データがnullの間、コンソールはすべてのデータがロードされてVuexストアにコミットされるまで、TypeErrorをスローします。RueサービスからのVueJSレンダリングデータ

どのように私は疑わしいと思っています。私は、エラーの発生を防止し、適切なデータがすべて取得されるまで待機する方法を理解しようとしています。私はv-ifを使って他の人がデータがnullであるかどうかを調べるのを見ました。単なる状態をすべてチェックするv-ifステートメントで詰まったアプリケーションなしで、同じ結果を達成するためのより良い方法があります。

私はこの解決策に出くわしましたが、まだそれは私が考えたように動作していません、私はまだ同じコンソールエラーを受けています。これらのキーワードを正しく使用していて、正しい場所にいるのですか?私が試したすべてのバリエーションで何も変わっていないからです。

Vuex処置:

const actions = { 
    getThread ({ commit }, payload) { 
    Vue.http 
     .get(`http://localhost:9000/threads/${payload.id}`) 
     .then(async response => { 
     commit(FETCH_THREAD, await response.data) 
     }) 
    } 
} 

これはアクション呼びかけ私VUEファイル内にある:

created() { 
    this.$store.dispatch('getThread', {id: '59280ab5acbafb17af9da902'}) 
    } 
+0

これを見て(https://router.vuejs.org/en/advanceことを必要としない非同期忘れますd/data-fetching.html)。 –

+0

@VAMSIKRISHNA私はこれも調べましたが、コンソールに同じエラーが発生していました。 – Jordan

+0

なぜそれは 'async-await'ですか? '.'で' get'が解決されると、既にデータを受け取りました。さらに、突然変異は同期的でしかないので、私が何かを見逃していなければ、このasync-await commitは意味をなさない。 – wostex

答えて

1

私はあなたがあなたのテンプレートであなたの店から何かを表示しようとしていると仮定します。問題は、Vueがまだ存在しないものをレンダリングできないことです。解決策は、データが存在するかどうかを確認することです。あなたが見ることができるようにfetchTheObject()が呼び出されるまでsomeObject.nameが存在しないため、あなたのコンソールにエラーが発生します

<template> 
    <div> 
     {{ someObject.name }} 
    </div> 
</template> 

<script> 
    export default { 
     data() { 
      return { 
       someObject: null 
      } 
     }, 
     methods: { 
      fetchTheObject() { 
       this.someObject = { 
        id: 1, 
        name: 'My object' 
       } 
      } 
     }, 
     created() { 
      setTimeout(() => { 
       this.fetchTheObject() 
      }, 3000) 
     } 
    } 
</script> 

はのは、このコンポーネントの例を見てみましょう。

ソリューションは、その制御するためのいくつかのv-if属性を置くことです:...一般的には

<template> 
    <div> 
     <span v-if="someObject === null">Fetching the object</span> 
     <span v-else>{{ someObject.name }}</span> 
    </div> 
</template> 

、あなたは何かがロードされているユーザーを表示するには、いくつかのスピナーを表示したいの

希望これを

EDITを支援します。そして、あなたのコード内で待って、あなたがここに

+0

3000年後のデータがあれば、何をすればよいでしょうか? – VMAtm

+0

分かりません – Hammerbot

+0

データを待つためのタイムアウトを「3000」に設定しました。現実のシナリオで3000年後のデータがない場合はどうでしょうか? – VMAtm

関連する問題