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

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

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

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

Q&A

解決済

1回答

3412閲覧

Vue.jsでinputに入力した文字列が表示されない

退会済みユーザー

退会済みユーザー

総合スコア0

Vue.js

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

0グッド

0クリップ

投稿2021/11/12 09:57

編集2021/11/12 10:01

前提・実現したいこと

書籍に記載されているソースコードを利用したハンズオンで、Vue.jsの学習中です。
本来であれば、inputフォームに入力した文字列が表示されるはずが、フォーム内に一切表示されません。
選択しているというカーソル表示は出るのですが、何を打ち込んでも文字が表示されないのです。
入力内容をフォーム内に表示させ、かつ検索結果に反映させたいのですが、どこが誤りなのでしょうか?
下記にデベロッパーツール上に出ているエラーメッセージを記載します。

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

[Vue warn]: Property or method "keyword" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties. found in ---> <BookSearch> at src/views/BookSearch.vue <App> at src/App.vue <Root>
[Vue warn]: Property or method "books" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties. found in ---> <BookSearch> at src/views/BookSearch.vue <App> at src/App.vue <Root>

該当のソースコード

Vue.js

1<template> 2<div id="search"> 3 <!-- 検索フォームを定義 --> 4 <el-form :inline="true"> 5 <el-form-item label="キーワード"> 6 <el-input type="text" size="large" v-model="keyword"></el-input> 7 </el-form-item> 8 <el-form-item> 9 <el-button type="primary" @click="onclick">検索</el-button> 10 </el-form-item> 11 </el-form> 12 <hr> 13 <!-- マッチした書籍情報をリスト表示 --> 14 <BookInfo v-for="(b, i) of books" :linkable="true" :book="b" :index="i + 1" :key="b.isbn"></BookInfo> 15</div> 16</template> 17 18<script> 19import BookInfo from '../components/BookInfo.vue'; 20 21export default { 22 name: 'book-search', 23 // ローカルコンポーネントを登録 24 components: { 25 BookInfo 26 }, 27 date() { 28 return { 29 keyword: 'vuejs', // 検索キーワード 30 books: [] // 検索結果 31 } 32 }, 33 methods: { 34 // [検索]ボタンで書籍情報を検索 35 onclick: function() { 36 this.$http('https://www.googleapis.com/books/v1/volumes?q=' + this.keyword) 37 // 応答データをJSONデータとして取得 38 .then((response) => { 39 return response.json() 40 }) 41 // JSON文字列の内容をbooksプロパティ(配列)に詰め替え 42 .then((data) => { 43 this.books = [] 44 for (let b of data.items) { 45 let authors = b.volumeInfo.authors 46 let price = b.saleInfo.listPrice 47 let img = b.volumeInfo.imageLinks 48 this.books.push({ 49 id: b.id, // id値 50 title: b.volumeInfo.title, // 書名 51 author: authors ? authors.join(',') : '', // 著者 52 price: price ? price.amount : '-', // 価格 53 publisher: b.volumeInfo.publisher, // 出版社 54 published: b.volumeInfo.publishedDate, // 刊行日 55 image: img ? img.smallThumbnail : '', // 表紙画像 56 }) 57 } 58 }) 59 } 60 } 61} 62</script>

試したこと

https://teratail.com/questions/124265
Reactになりますが、上記を参考にスペルミスは確認したつもりです。
見逃しがあるようでしたら教えていただきたいです。

また、エラーメッセージから、keywordとBooksの定義がなされていないことは把握できたのですが、利用している書籍の最新の正誤表(最新更新:2021年11月11日)には記載がありませんでした。

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

vue:2.6.14
vue cli:4.5.15

ハンズオンとして使用している書籍は「これからはじめるVue.js実践入門」になります。

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

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

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

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

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

guest

回答1

0

ベストアンサー

写し間違えでないのなら、ここですかね。

js

1 date() { 2 return { 3 keyword: 'vuejs', // 検索キーワード 4 books: [] // 検索結果 5 } 6 },

vueではdataを定義すると、this.data.xxxで参照できるようになるわけですが、
上記のコードはスペルミスをしていますね。
誤:date
正:data

投稿2021/11/12 12:11

mingos

総合スコア4207

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

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

退会済みユーザー

退会済みユーザー

2021/11/12 12:13

ありがとうございます! ちょうど今見返していてそこに気付いて修正したところ、無事に反映されるようになりました。 確認くださってありがとうございます。 data、個人的に間違えやすいので気をつけます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問