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

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

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

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

Q&A

解決済

2回答

614閲覧

useCookies.get("hash"); 時にTypeError: Qo.get is not a function

sskcom

総合スコア4

Vue.js

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

0グッド

1クリップ

投稿2022/12/31 07:19

編集2022/12/31 07:42

前提

vue+Laravelでログイン機能を作成しています・

実現したいこと

Laravelから返ってきた値をcookieに保存し
保存した値を取得するという事をやりたいです。

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

エラーメッセージ TypeError: Qo.get is not a function at Proxy.cookie (app.e1a77fed.js:70:131250) at app.e1a77fed.js:1:70302 at Xn (app.e1a77fed.js:1:13816) at Zt (app.e1a77fed.js:1:13895) at Zt (app.e1a77fed.js:1:13995) at HTMLButtonElement.n (app.e1a77fed.js:1:70086) Ky @ app.e1a77fed.js:1

クッキーテストというボタンが押された時に
以下の内容を実行するようにしていますが

vue

1cookie() { 2 // cookie からハッシュを取得 3 4 this.test = useCookies.get("hash"); 5 } 6

こちらを実行すると上記のエラーが発生します。

関数が存在しないという事なのですが以下の定義を見る限りget自体はあるという認識です。
知識のある方、どうかご教授頂けると幸いです。
イメージ説明

vue

1cookie() { 2 // cookie からハッシュを取得 3 4 this.test = useCookies.get("hash"); 5 } 6

該当のソースコード

vue

1<template> 2 3 4 <div> 5 {{ test }} 6 </div> 7 8 <div 9 v-bind:style="{ position: 'fixed', left: '50%', top: '50%', transform: 'translate(-50%, -50%)', width: '500px', height: '400px' }"> 10 <v-form ref="form" v-model="valid" lazy-validation> 11 <v-text-field v-model="username" :counter="10" :rules="usernameRules" label="名前" required></v-text-field> 12 13 <v-text-field v-model="email" :rules="emailRules" label="メールアドレス" required></v-text-field> 14 15 <v-text-field v-model="password" :rules="passwordRules" label="パスワード" required></v-text-field> 16 17 18 <v-btn v-bind:style="{ left: '85%' }" 19 class="mr-4 rounded-full px-4 py-2 text-gray-500 bg-blue-500 hover:bg-gray-300 focus:outline-none focus:shadow-outline" 20 @click="validate"> 登録 21 22 </v-btn> 23 24 25 26 27 </v-form> 28 29 <v-btn @click="cookie"> 30 クッキーテスト 31 </v-btn> 32 33 </div> 34</template> 35 36<script> 37import axios from 'axios'; 38import { useCookies } from 'vue3-cookies' 39 40export default { 41 42 43 44 data: () => ({ 45 test: "", 46 valid: true, 47 username: '', 48 usernameRules: [ 49 v => !!v || '名前は必須です', 50 v => (v && v.length <= 10) || '名前は10文字以内である必要があります', 51 ], 52 email: '', 53 emailRules: [ 54 v => !!v || 'メールアドレスは必須です', 55 v => /.+@.+..+/.test(v) || '有効なメールアドレスである必要があります', 56 ], 57 password: '', 58 passwordRules: [ 59 v => !!v || 'パスワードは必須です', 60 v => (v && v.length >= 6 && v.length <= 12) || 'パスワードは6文字から12文字である必要があります', 61 v => (v && /[A-Z]/.test(v) && /[a-z]/.test(v) && /\d/.test(v)) || 'パスワードは少なくとも1つの大文字、1つの小文字、1つの数字を含む必要があります' 62 ], 63 64 }), 65 66 setup() { 67 68 }, 69 70 methods: { 71 async validate() { 72 const { valid } = await this.$refs.form.validate() 73 74 75 76 if (valid) { 77 alert('こちらの内容でよろしいですか?') 78 79 const username = this.username; 80 const email = this.email; 81 const password = this.password; 82 83 84 85 86 87 try { 88 // POSTリクエストを送信 89 const res = await axios.post('/api/register', { 90 username: username, 91 email: email, 92 password: password 93 }); 94 95 console.log(res); 96 97 // レスポンスを処理 98 const hash = res.data.hash; 99 100 101 102 console.log(hash, email, username) 103 104 105 useCookies.set('hash', hash, { 106 expires: new Date().setDate(new Date().getDate() + 7) // 保存期間を 7 日に設定 107 }) 108 useCookies.set('email', email, { 109 expires: new Date().setDate(new Date().getDate() + 7) // 保存期間を 7 日に設定 110 }) 111 useCookies.set('username', username, { 112 expires: new Date().setDate(new Date().getDate() + 7) // 保存期間を 7 日に設定 113 }) 114 115 116 117 118 119 } catch (error) { 120 // エラー処理 121 // ... 122 } 123 124 125 } 126 127 }, 128 reset() { 129 this.$refs.form.reset() 130 131 }, 132 resetValidation() { 133 this.$refs.form.resetValidation() 134 135 136 }, 137 138 139 cookie() { 140 // cookie からハッシュを取得 141 142 this.test = useCookies.get("hash"); 143 } 144 145 }, 146 147} 148</script>

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

Docker
nginx
Laravel9
vue3
vite3

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

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

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

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

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

maisumakun

2022/12/31 07:48

useCookiesは、どのようなライブラリからimportされたものでしょうか?
sskcom

2022/12/31 08:11

コメントありがとうございます。 補足情報に記載しておらず申し訳ございません。 vue3-cookiesです。
guest

回答2

0

ベストアンサー

vue3-cookies のライブラリはこちらで合っていますかね👀
https://github.com/KanHarI/vue3-cookies

その場合、useCookies()cookiesというリアクティブなオブジェクトが返るので、それに対して get メソッドを実行してあげれば良さそうな気がします!
下記のように修正してうまくいくか試していただけますでしょうか?

setup() { const { cookies } = useCookies(); }, ... cookie() { this.test = this.cookies.get("hash"); }

ちなみに、 useCookies の実装は下記のようになっているようです📝
https://github.com/KanHarI/vue3-cookies/blob/master/src/index.ts#L235-L243

投稿2023/01/03 12:55

編集2023/01/03 12:56
k29

総合スコア22

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

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

sskcom

2023/01/03 20:10

回答ありがとうございます。 今すぐ試す事が出来ないので返答遅くなると思いますが、 試してみます。
sskcom

2023/01/08 05:23

対応が遅く誠に申し訳ございません。 以上の内容の通り実行したところ、問題なく実行できました。 ありがとうございます。
k29

2023/01/08 06:36

お試しいただきありがとうございます! うまくいったようで良かったです🎉
guest

0

vue3-cookiesです。

readmeを確認しても、Vue.$cookiesthis.$cookiesからの呼び出しばかりで、useCookies.と直接呼ぶ形で使うものではなさそうです。

投稿2022/12/31 08:16

maisumakun

総合スコア145183

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

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

sskcom

2023/01/03 07:07

返答、大変遅くなり申し訳ございません。 そうですね、そちらの内容で試してみます。 すぐに試す事が出来ないので、また返答は遅くなると思います。 調べて頂きありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問