Vue.jsでテンプレート内で配列を使用しています。
ものすごく省略すると下記の様な感じです。
createdなりmountedなりでaxiosで読み込んでいるので最終的にはちゃんと表示されますがConsoleには「Error in render: "TypeError: Cannot read property 'name' of undefined"」とエラーが表示されます。
そこで同期処理としてasync、awaitを使えば良いのか?と思いまして下記のように書いてみました。
js
1<template> 2 <div> 3 <div>{{lists[0].name}}</div> 4 <div>{{lists[1].name}}</div> 5 <div>{{lists[2].name}}</div> 6 </div> 7</template> 8 9<script> 10import axios from 'axios' 11export default { 12 data(){ 13 return{ 14 lists:[] 15 } 16 }, 17 created(){ 18 const main = async () => { 19 var res = await axios.get("http://localhost/api/getLists.php"); 20 console.log(res); 21 this.lists = res.data.lists; 22 } 23 24 main(); 25 26 console.log(this.lists); 27 } 28} 29</script>
先に書いたとおり画面上にはaxiosも実行されているので最終的にはちゃんと表示されています。
期待している動作はcreatedでmain()
が実行されてaxiosの受取を待機することで(同期することで)this.lists
に配列が代入されることでテンプレートのエラーを表示したくないのです。
(data()内でlists配列の内容を空でちゃんを入れればエラーが出ないのは承知しています)
しかし実際はConsoleを見る限りCannot read property 'name'・・
エラーの後にconsole.log(this.lists);
が実行されてその後console.log(res);
が実行されているように見えています。
期待している動作をさせるにはどう書いたらよいでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/13 05:08
2020/02/13 05:19