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

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

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

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

4回答

566閲覧

push.()したら[Vue warn]: Error in render: "TypeError: Cannot read property 'text' of undefined"のエラーが出る。

YoheiYokota

総合スコア11

Vue.js

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/09/11 01:38

編集2020/09/11 01:59

前提・実現したいこと

Ruby on Railsでタスク管理システムを作っています。
タグとタスクという概念があり、tag has many tasksという関係です。

axios.post()でタグを作成したあとに、vueで表示するdataのtagsの中にpostしたオブジェクトを追加しようとpush()を使って実装したのですが、これが次のようなエラーになってしまいます。

textは特に呼び出していないため、何がエラーになっているのかが不明です。

発生している問題・エラーメッセージ

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

該当のソースコード

vue.js

1document.addEventListener('DOMContentLoaded', () => { 2 new Vue ({ 3 el: '#tags', 4 methods:{ 5~~~~~~~~~~~省略~~~~~~~~~~~ 6 addTag: function(){ 7 this.submitting = true; 8 const newTag = { 9 tag: { 10 title: this.newTagTitle, 11 status: 0, 12 tasks: [] 13 } 14 } 15 axios.post('/api/tags', newTag) 16 .then(() => { 17 console.log('just created a tag') 18 this.submitting = false; 19 this.showNewTagForm = false; 20 this.tags.push(newTag); //ここでエラーが出ています。 21 this.newTagTitle = ''; 22 newTag.tag.title = ''; 23 }).catch(error => { 24 console.log(error); 25 }); 26 } 27 }, 28~~~~~~~~~~~省略~~~~~~~~~~~ 29 data: { 30 tags: [], 31 options: [ 32 { name: "低", id: 1 }, 33 { name: "中", id: 2 }, 34 { name: "高", id: 3 } 35 ], 36 showNewTagForm: false, 37 showStatusFrom: false, 38 changeStatusTag: 0, 39 deleteConf: false, 40 deleteTarget: 0, 41 helloWorld: false, 42 firstModal: true, 43 newTagTitle: '', 44 loading: false, 45 submitting: false, 46 newTaskTextItems: '', 47 newTaskDeadlineItems: '', 48 newTaskPriorityItems: '' 49 } 50 }) 51})

同じくmethods内にあるaddTask内でも同じような機能を実装していますが、これはエラーは出ず、ちゃんと期待通りの挙動になります。

addTask: function(tagId, i) { const newTask = { task: { text: this.newTaskTextItems[i].text, deadline: this.newTaskDeadlineItems[i].deadline, priority: this.newTaskPriorityItems[i].selected }, tag_task_connection: { tag_id: tagId } } axios.post('/api/task/create', newTask) .then(() => { console.log('just created a task') newTask.task.limit = Math.ceil((parseDate(this.newTaskDeadlineItems[i].deadline).getTime() - new Date().getTime())/(1000*60*60*24)); this.tags[i].tasks.push(newTask.task); this.newTaskTextItems[i].text = '', this.newTaskDeadlineItems[i].deadline = '', this.newTaskPriorityItems[i].selected = '', newTask.tasks = '', newTask.tag_task_connection = '' }).catch(error => { console.log(error); }); }

試したこと

  • this.tags.push(newTag);をコメントアウト。

→エラーが消えます。

  • this.tags.push(newTag);this.tags.push('something')に変更する。

→同じエラーになります。

補足情報(FW/ツールのバージョンなど)

  • vueのバージョン

$ npm list vue
project@0.1.0 /Users/me/Desktop/apps/project
├── UNMET DEPENDENCY vue@^2.6.12
└─┬ vue-turbolinks@2.1.0
└── UNMET DEPENDENCY vue@2.6.12

  • rubyのバージョン

$ ruby -v
ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-darwin19]

  • railsのバージョン

$ bundle exec rails -v
Rails 6.0.3.2

  • その他

↓ここにも同じ質問を投げてます。
https://stackoverflow.com/questions/63827677/vue-warn-error-in-render-typeerror-cannot-read-property-text-of-undefine

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

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

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

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

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

guest

回答4

0

改修後のコードです。

addTag: function(){ this.submitting = true; const newTag = { tag: { title: this.newTagTitle, status: 1, tasks: [], errors: { text: '', deadline: '', priority: '' } } } axios.post('/api/tags', newTag) .then(() => { console.log('just created a tag') this.submitting = false; this.showNewTagForm = false; this.newTagTitle = ''; if (this.errors != '') { this.errors = '' } var newTaskTextItem = {text: ''}; var newTaskDeadlineItem = {deadline: ''}; var newTaskPriorityItem = {selected: 0}; this.newTaskTextItems.push(newTaskTextItem); //これをやってなかったのが原因でした。 this.newTaskDeadlineItems.push(newTaskDeadlineItem); this.newTaskPriorityItems.push(newTaskPriorityItem); this.tags.push(newTag.tag); }).catch(error => { if (error.response.data && error.response.data.errors) { this.errors = error.response.data.errors; } this.submitting = false; this.showNewTagForm = false; }); },

投稿2020/09/12 04:07

YoheiYokota

総合スコア11

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

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

0

addTag: function(){ this.submitting = true; const newTag = { tag: { title: this.newTagTitle, status: 1, tasks: [], errors: { text: '', deadline: '', priority: '' } } } axios.post('/api/tags', newTag) .then(() => { console.log('just created a tag') this.submitting = false; this.showNewTagForm = false; this.newTagTitle = ''; if (this.errors != '') { this.errors = '' } var newTaskTextItem = {text: ''}; var newTaskDeadlineItem = {deadline: ''}; var newTaskPriorityItem = {selected: 0}; this.newTaskTextItems.push(newTaskTextItem); //これをやってなかったのが原因でした。 this.newTaskDeadlineItems.push(newTaskDeadlineItem); this.newTaskPriorityItems.push(newTaskPriorityItem); this.tags.push(newTag.tag); }).catch(error => { if (error.response.data && error.response.data.errors) { this.errors = error.response.data.errors; } this.submitting = false; this.showNewTagForm = false; }); },

投稿2020/09/12 04:03

YoheiYokota

総合スコア11

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

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

0

自己解決

解決しました。
pushした新しいtagがviewでnewTaskTextItems[i].textを呼んでいることが原因みたいです。
改修したらコードを載せます。

投稿2020/09/11 07:03

編集2020/09/11 07:12
YoheiYokota

総合スコア11

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

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

0

エラーの原因は関数の問題ではないと愚考します。

エラーをよく読んでください。

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

Google翻訳にかけると

[Vue warn]:レンダリングエラー:「TypeError:未定義のプロパティ 'text'を読み取れません」

レンダリングエラーです。

レンダリングとは、何らかの抽象的なデータ集合を元に、一定の処理や演算を行って画像や映像、音声などを生成すること。

VueがDOMを描画する(レンダリング)時にエラーを起こしているのではないでしょうか?

例えばですけど、

tags.length == 0とかtasks.length == 0 のときに
html側で{{tags[i].tasks[j].text}}とか呼び出してるのではないでしょうか?

投稿2020/09/11 06:57

Arice_Banan

総合スコア60

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問