JSFiddle - React, Tailwind, and code Playground

by nekonenene

HTML

<!doctype html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>デモ</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
  </head>
  <body>
    <div class="container" id="app">
      <form class="mt-3">
        <div class="mb-3">
          <label for="exampleInputEmail1" class="form-label">メールアドレス</label>
          <input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" v-model="email" required="required">
        </div>
        <div class="text-end">
          <button type="submit" class="btn btn-primary" @click="clickedButton" :disabled="!canSubmit" :class="canSubmit ? 'btn-primary' : 'btn-secondary'">送信!</button>      
        </div>
      </form>
    </div>
  </body>
</html>

CSS

body {
  margin: 20px;
}

JavaScript

new Vue({
  el: '#app',
  data: {
    email: '',
  },
  methods: {
		clickedButton(ev) {
      ev.preventDefault();
      confirm(`${this.email} を送信しました`);
    },
  },
  computed: {
    canSubmit() {
      return this.email !== '';
    },
  }
});