💻
NuxtでヘッドレスフォームのHyperFormを実装してみた!
NuxtでヘッドレスフォームのHyperFormを実装してみた!
NuxtやNextの環境を含め、フォーム実装を行う際は
- Google form
- NetlifyのForms機能
- SendGrid
- formrun
- HyperForm
などなどありますが、今回HyperFormで実装してみました。
開発環境
package.json
{
"dependencies": {
"@nuxt/content": "^1.15.1",
"@nuxtjs/axios": "^5.13.6",
"@nuxtjs/date-fns": "^1.5.0",
"@nuxtjs/google-fonts": "^3.0.0-0",
"@nuxtjs/gtm": "^2.4.0",
"@nuxtjs/pwa": "^3.3.5",
"@nuxtjs/sitemap": "^2.4.0",
"@nuxtjs/style-resources": "^1.2.1",
"@types/sanitize-html": "^2.6.2",
"core-js": "^3.19.3",
"gsap": "^3.11.0",
"nuxt": "^2.15.8",
"nuxt-microcms-module": "^2.0.1",
"raw-loader": "^4.0.2",
"ress": "^5.0.2",
"sanitize-html": "^2.7.3",
"sass": "^1.54.0",
"sass-loader": "^10.3.1",
"swiper": "^5.4.5",
"three": "^0.142.0",
"three-orbit-controls": "^82.1.0",
"uninstall": "^0.0.0",
"vee-validate": "3.0",
"vue": "^2.6.14",
"vue-awesome-swiper": "^4.1.1",
"vue-server-renderer": "^2.6.14",
"vue-template-compiler": "^2.6.14",
"vue-underscore": "^0.1.4",
"vuelidate": "^0.7.7",
"webpack": "^4.46.0"
}
}
主なバージョンや環境の確認
- Nuxtは、2.15.8
- Vueは、2.6.14
- SSG(Static Site Generator)
インストールするもの、アカウントを作るもの
- HyperFormのアカウント作る
実装したコード
上記のURLのHyperForm 問い合わせデータをAPIで送信する形にして実装いたしました。
sample.vue
<div id="app">
<h2>Form</h2>
<label>
Name
</label>
<input v-model="name">
<label>
E-Mail
</label>
<input v-model="email">
<label>
Body
</label>
<textarea v-model="body"></textarea>
<button type="button" @click="send">Send</button>
</div>
sample.vue
new Vue({
el: "#app",
data: {
name:'',
email:'',
body:'',
},
methods: {
async send() {
await fetch('https://hyperform.jp/api/async/{your-form-id}/complete', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: this.name,
email: this.email,
body: this.body
})
})
this.name = ''
this.email = ''
this.body = ''
}
}
})
上記のコードですが
mikkameeeさんから参考コードを頂き実装いたしました。
ポイントは
-
今回は参考サイトに従って、fetch APIを使用
-
body: JSON.stringifyのemailは、絶対変えない
sample.vue NG ❌
body: JSON.stringify({
name: this.name,
メールアドレス: this.email,
body: this.body
})
sample.vue OK ⭕️
body: JSON.stringify({
name: this.name,
email: this.email,
body: this.body
})
- methodは、POSTにする
sample.vue
method: 'POST',
- HyperFormのsampleであるactionは不要である
- HyperForm sample
https://hyperform.jp/#sample
sample.vue
// action="https://hyperform.jp/api/3zCe4TkP"の部分
<form method="post" action="https://hyperform.jp/api/3zCe4TkP" target="_blank" enctype="multipart/form-data">
</form>
おまけ
送信完了ページを作りたい場合は、thenを使ってlocation.hrefを設定すれば可能です!
sample.vue
new Vue({
el: "#app",
data: {
name:'',
email:'',
body:'',
urlfix: '/contact/thanks/',
},
},
methods: {
async send() {
await fetch('https://hyperform.jp/api/async/{your-form-id}/complete', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: this.name,
email: this.email,
body: this.body
})
})
.then((responase) => {
this.name = ''
this.email = ''
this.body = ''
location.href = this.urlfix;
})
}
}
上記は近日に応用編のような形で、また記事にしたいと思います!
まとめ
フロントエンドエンジニアやマークアップエンジニアなど、フロント側にとっては頼もしいライブラリです!
今回、サポートして頂いたmikkameeeさんには感謝です🙇♂
ありがとうございました!
今後もfetch APIを絡んだヘッドレスフォーム、ヘッドレスCMSは注目して行きたいです👍
参考記事URL
- HyperForm
- HyperForm 問い合わせデータをAPIで送信する
Discussion