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

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

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

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

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Vuex

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

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

1回答

2191閲覧

nuxt typescript payjpで2回目画面表示時に「すでにインスタンス化されています」とエラーが出る

sayum

総合スコア17

Vue.js

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

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Vuex

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

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2020/10/18 07:01

現在nuxt typescript payjp で決済画面を作成している途中なのですが、
1回目の画面表示時は大丈夫なのですが、2回目画面表示時に上記エラーが表示されてしまいます。

destroyedでPayjpインスタンスを削除等色々やってみているのですが、なかなかうまく行きません
お力添えいただければ幸いです。

以下コードになります。

vue

1 2<template> 3 <div> 4 <h1>クレジットカード情報</h1> 5 <div class="card-form"> 6 <div id="payjp-form" class="payjs-outer"></div> 7 </div> 8 </div> 9</template> 10 11 12export default class CardForm extends Vue { 13 14 15 mounted () { 16 // @ts-ignore 17 const payjp = window.Payjp('/**テストアカウントのトークン**/') 18 const elements = payjp.elements() 19 const cardElement = elements.create('card') 20 cardElement.mount('#payjp-form') 21 22 } 23 24 destroyed () { 25 26 } 27 28}

nuxt.config.js

js

1 head: { 2 title: process.env.npm_package_name || '', 3 meta: [ 4 { charset: 'utf-8' }, 5 { name: 'viewport', content: 'width=device-width, initial-scale=1' }, 6 { hid: 'description', name: 'description', content: process.env.npm_package_description || '' } 7 ], 8 link: [ 9 { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' } 10 ], 11 script: [ 12 {src: 'https://js.pay.jp/v2/pay.js', async: true } // ここでpayjpを読んでいる 13 ] 14 }, 15/**省略 **/

エラー

client.js?06a0:97 Error: 既にインスタンス化されています at new e (pay.js:1) at window.Payjp (pay.js:1) at VueComponent.mounted (CardForm.vue?fbc2:44) at invokeWithErrorHandling (vue.runtime.esm.js?2b0e:1854) at callHook (vue.runtime.esm.js?2b0e:4219) at Object.insert (vue.runtime.esm.js?2b0e:3139) at invokeInsertHook (vue.runtime.esm.js?2b0e:6346) at VueComponent.patch [as __patch__] (vue.runtime.esm.js?2b0e:6565) at VueComponent.Vue._update (vue.runtime.esm.js?2b0e:3948) at VueComponent.updateComponent (vue.runtime.esm.js?2b0e:4060)

お手数ですが、ヒントになることがありましたらご教授お願いいたします。

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

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

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

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

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

guest

回答1

0

わたしも同じエラーが発生して、こちらの記事を参考に解決しました。
https://yasutomo.hatenablog.com/entry/2021/01/15/210113

つまるところ、Payjpのインスタンスを複数回初期化することに対してエラーが出ているため、
一度だけ初期化してあげることで解決できます。

上記のリンク通りの方法でなくても、以下のコードなどでうまくいきます。
(nuxt.js を使っていないので、vue.jsのコードです)

- - - - - - - - > store.js const store = new Vuex.Store({ state: { // 共有したいパラメータ abc: "****", // ** 省略 ** // payjp: Payjp('pk_test_********') }, }) - - - - - - - - > 購入機能を使用するView export default class CardForm extends Vue { mounted () { const payjp = this.$store.payjp // 既に初期化済み // 以下はこれまで通り const elements = payjp.elements() const cardElement = elements.create('card') cardElement.mount('#payjp-form') } }

投稿2022/09/29 05:12

takesan311

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問