前提・実現したいこと
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
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。