質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Vuex

Vuexは、Vue.js アプリケーションのための状態管理ライブラリです。アプリケーション内で使用するコンポーネントのための集中データストアを提供。コンポーネント同士でデータをやり取りし、処理のフローを一貫させたり、データの見通しを良くすることができます。

Q&A

解決済

2回答

5543閲覧

ネストの深いオブジェクトの表示はされるのですが、undefinedの注意が出てしまいます。

kuriya

総合スコア35

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Vuex

Vuexは、Vue.js アプリケーションのための状態管理ライブラリです。アプリケーション内で使用するコンポーネントのための集中データストアを提供。コンポーネント同士でデータをやり取りし、処理のフローを一貫させたり、データの見通しを良くすることができます。

0グッド

0クリップ

投稿2018/10/26 03:55

編集2018/10/26 05:11

loginUser.user_profile.last_nameなど3つネストしているオブジェクトでは以下のエラーが出てしまいます。
原因が分かる方いらしゃいましたら、教えていただきたいです。

[Vue warn]: Error in render: "TypeError: Cannot read property 'last_name' of undefined" ... TypeError: Cannot read property 'last_name' of undefined ...

コンポーネント

<template> <div class="user-edit"> <h2>プロフィール編集</h2> {{ loginUser.email }} {{ loginUser.user_profile }} {{ loginUser.user_profile.last_name }} </div> </template> <script> import {mapState} from 'vuex' export default { computed: { ...mapState({ loginUser: state => state.loginUser.loginUser }) }, mounted() { this.$store.dispatch('loginUser/getLoginUser'); } } </script>

vuexを使っていて、getLoginUserというactionでaxiosを使ってAPIでデータを取ってきています。

よろしくお願いいたします。

補足
(1)...last_name以外の文字列は想定通りに表示されていますか?
last_name以外の文字列も問題なく表示はされますがwarnが出ます。

(2)また、データ取得時に、想定通りにデータが取得できているかをデバッガ等で確認はされましたか?その値はどうだったでしょうか?
vueのデバッガでは以下のように値は入っていました。なのでundefinedにはならないはずなのですが読み込みタイミングなきがしています。

loginUser:Object loginUser:Object email:"test@gmail.com" id:8 name:"yamada" user_profile:Object birth_date:null created_at:null first_name:"太郎" gender_id:null last_name:"山田" updated_at:"2018-10-26 02:31:29" user_id:8

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/10/26 04:05

次の二点について確認し、追記があるとよいかと >> (1)...last_name以外の文字列は想定通りに表示されていますか?(2)また、データ取得時に、想定通りにデータが取得できているかをデバッガ等で確認はされましたか?その値はどうだったでしょうか?
kuriya

2018/10/26 04:16 編集

回答させていただきました。よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2018/10/26 05:08 編集

あと、ほかの文字列でも出ているwarnがきになります
kuriya

2018/10/26 05:09

user_profileのあるuserを読み込んでいます。
退会済みユーザー

退会済みユーザー

2018/10/26 05:11

ごめんなさい、そうですよね。リストを受け取っているわけではなさそうですし。
guest

回答2

0

自己解決

dispatchでデータをセットする前にtemplateで呼び出そうとしていたので、undefinedになっていたっぽいです。beforeCreateのタイミングなどでdispatchしてもだめでした。
vuexのstateにdefaultの値をセットしておくことでエラーを回避することができました。

投稿2018/10/26 05:30

kuriya

総合スコア35

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

loginUser.user_profileは正しく表示されていますか?
TypeError: Cannot read property 'last_name' of undefinedというエラーは
undefinedなオブジェクトにlast_nameというものはないですよというエラーになり、
last_nameを指定しているloginUser.user_profileがundefinedである可能性があります。

投稿2018/10/26 04:13

dice142

総合スコア5158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuriya

2018/10/26 04:19 編集

`loginUser.user_profile`は ``` { "user_id": 8, "first_name": "太郎", "last_name": "山田", "birth_date": null, "created_at": null, "updated_at": "2018-10-26 02:31:29" } ``` のようなオブジェクトが表示されます。なのでundefinedでは無いです。
dice142

2018/10/26 04:21

誤字でもなさそうですし、HTMLの描画タイミングですかね。 `loginUser.user_profile`が設定された後でHTMLが描画されているか確認されたほうが良いと思います。
kuriya

2018/10/26 05:07

https://jp.vuejs.org/v2/guide/instance.html 現状mountedとなっている箇所をupdatedやcreatedなど全てのライフサイクル?を試したのですが、だめでした。 `loginUser.user_profile`が設定された後でHTMLが描画されているかの確認はどのように行えば良いでしょうか?
dice142

2018/10/26 05:29

vue.jsによるデバッグ経験がほぼほぼないのでできるかは不明ですが、 loginUser.user_profileを設定した箇所にブレークポイントを設定し、 動きを確かめてみると良いかもしれません。 この時に、既に同様のエラーが出てるなら描画後ということになりますし、 エラーが出ていないなら別な原因になります。
kuriya

2018/10/26 05:30

dispatchでデータをセットする前にtemplateで呼び出そうとしていたので、undefinedになっていたっぽいです。beforeCreateのタイミングなどでdispatchしてもだめでした。 vuexのstateにdefaultの値をセットしておくことでエラーを回避することができました。 `dice142`さん,`ppn`さん有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問