Reactのボタンクリックでフォームが入力されていることを確認するにはどうすればよいですか?

Shmeduard

ユーザーから提供された数値に基づいて計算を行い、結果をページに入力するボタンがあります。その同じボタンはまた、データベースからそれらの同じ製品をページに視覚的に入力しながら、製品をデータベースに保存します。つまり、基本的には、ユーザーがフィールドに入力したものの合計と以前の合計が表示されます。私の問題は、エラー処理を含めて、すべてのフォームに入力しなかったために数値が0またはNaNの場合、アラートをスローし、データをデータベースにプッシュしないようにすることです。これは私の試みであり、機能しません。結果がNaNの場合でも表示され、NaN値がデータベースにプッシュされます。これを実現するにはどうすればよいですか?試行は次のとおりです。

handleClick = (event, billInfo) => {
event.preventDefault();
const dbRef = firebase.database().ref();

const result =
  (billInfo.amount / billInfo.group) * (billInfo.tip / 100 + 1);

// ATTEMPT START ======

result === NaN
  ? alert("Please fill all forms!")
  : dbRef.push({
      result: result.toFixed(2),
      name: billInfo.name,
    });

// ATTEMPT END ======

this.setState({
  total: result.toFixed(2),
});

これは、メインのapp.jsにリンクするボタンを備えたフォームコンポーネントです。

class inputForm extends Component {
  constructor() {
    super();
    this.state = {
      name: "",
      group: "",
      amount: "",
      tip: "",
    };
  }

  handleChange = (event) => {
    this.setState({
      [event.target.name]: event.target.value,
    });
  };

  clearForm = (event) => {
    event.preventDefault();

    this.setState({
      name: "",
      group: "",
      amount: "",
      tip: "",
    });
  };

  render() {
    return (
      <form className="tipApp">
        <div>
          <label htmlFor="groupName">
            <i class="fas fa-id-card"></i>Group Name?
          </label>
          <input
            onChange={this.handleChange}
            type="text"
            id="groupName"
            value={this.state.name}
            placeholder="Name your group"
            name="name"
          />
        </div>

        <div>
          <label htmlFor="groupSize">
            <i class="fas fa-users"></i>How many?
          </label>
          <input
            onChange={this.handleChange}
            type="number"
            id="groupSize"
            value={this.state.group}
            min="1"
            step="1"
            placeholder="Add the group size"
            name="group"
            required
          />
        </div>

        <div>
          <label htmlFor="billAmount">
            <i class="fas fa-receipt"></i>How much?
          </label>
          <input
            onChange={this.handleChange}
            type="number"
            id="billAmount"
            value={this.state.amount}
            min="0"
            step=".01"
            placeholder="Add the bill total"
            name="amount"
            required
          />
        </div>

        <div>
          <label htmlFor="tipAmount">
            <i class="fas fa-heart"></i>Tip?
          </label>
          <input
            onChange={this.handleChange}
            type="number"
            id="tipAmount"
            value={this.state.tip}
            min="10"
            step="5"
            placeholder="Add the tip %"
            name="tip"
          />
        </div>

        <button onClick={(event) => this.props.getTotal(event, this.state)}>
          Split it!
        </button>
        <button onClick={this.clearForm}>Reset</button>
      </form>
    );
  }
}

これは、エラー処理を試みた完全なapp.jsメインファイルです。

class App extends Component {
  constructor() {
    super();
    this.state = {
      bills: [],
      total: 0,
    };
  }

  componentDidMount() {
    const dbRef = firebase.database().ref();

    // Event listener that watches the database
    dbRef.on("value", (snapshot) => {
      const firebaseData = snapshot.val();

      const billData = [];

      for (const bill in firebaseData) {
        billData.push({
          id: bill,
          name: firebaseData[bill].name,
          value: firebaseData[bill].result,
        });
      }
      this.setState({
        bills: billData,
      });
    });
  }

  handleClick = (event, billInfo) => {
    event.preventDefault();
    const dbRef = firebase.database().ref();

    const result =
      (billInfo.amount / billInfo.group) * (billInfo.tip / 100 + 1);

    result === NaN
      ? alert("Please fill all forms!")
      : dbRef.push({
          result: result.toFixed(2),
          name: billInfo.name,
        });

    this.setState({
      total: result.toFixed(2),
    });
  };

  deleteBill = (billId) => {
    const dbRef = firebase.database().ref();

    dbRef.child(billId).remove();
  };

  render() {
    return (
      <div className="wrapper">
        <h1 className="logoName">Spl|tr</h1>
        <h3>Bill Splitting App</h3>

        <Form getTotal={this.handleClick} />
        <h2>${this.state.total}</h2>

        <h3>Previous Bills</h3>
        <Bills receipts={this.state.bills} delete={this.deleteBill} />
      </div>
    );
  }
}

これは、ボタンクリック時にフォームの下にある前のアイテムをページに入力したBills.jsコンポーネントです。

const Bills = (props) => {
  return (
    <ul>
      {props.receipts.map((bill) => {
        return (
          <li key={bill.id}>
            <p>{bill.name}</p>
            <p>${bill.value}</p>
            <button onClick={() => props.delete(bill.id)}>
              <i class="fas fa-times-circle"></i>
            </button>
          </li>
        );
      })}
    </ul>
  );
};
ドリューリース

ハンドラーは、有効な結果であるかどうかに関係なく、状態を更新します。小さなリファクタリングは、有効な結果とプッシュDBへと更新状態のいずれかできるはずOR無効な結果やアラートを。0NaN両方とも偽の値であるため、resultが真/偽であるかどうかを簡単に確認できます

handleClick = (event, billInfo) => {
  event.preventDefault();
  const dbRef = firebase.database().ref();

  const result =
    (billInfo.amount / billInfo.group) * (billInfo.tip / 100 + 1);

  if (result) {
    dbRef.push({
      result: result.toFixed(2),
      name: billInfo.name,
    });
    this.setState({
      total: result.toFixed(2),
    });
  } else {
    alert("Please fill all forms!")
  }
};

how-do-i-check-to-make-sure-the-form-is-filled-on-button-click-in-reactを編集します

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

新しい自動スケーリングされたAzureApp Serviceインスタンスがトラフィックを処理する前にウォームであることを確認するにはどうすればよいですか?

分類Dev

ユーザーがXamarinフォームに入力していることを確認するにはどうすればよいですか?

分類Dev

すべてのフィールドがphpで入力されていることを確認するにはどうすればよいですか?

分類Dev

メソッドでボタンがクリックされているかどうかを確認するにはどうすればよいですか?

分類Dev

ボタンがクリックされたときにフォームをクリアするにはどうすればよいですか?

分類Dev

jQueryでボタンが複数回クリックされているかどうかを確認するにはどうすればよいですか?

分類Dev

Puppeteerのナビゲーションボタンをクリックするとnullが返されますか?クリックされている機能を確認するにはどうすればよいですか?

分類Dev

ポリマー1.0の用紙入力でEnterキーが押されていることを確認するにはどうすればよいですか

分類Dev

ボタンをクリックして入力にフォーカスしたときに、USB HIDデバイスが接続されたWebビューにソフトキーボードを表示するにはどうすればよいですか?

分類Dev

ボタンがクリックされていないかどうかを確認するにはどうすればよいですか

分類Dev

ラジオボタンがクリックされているかどうかを確認するにはどうすればよいですか?

分類Dev

ボタンがクリックされているかどうかを確認するにはどうすればよいですか?

分類Dev

送信ボタンをクリックした後、ページでラジオボタンがチェックされていることを確認するにはどうすればよいですか?

分類Dev

REACT.jsのボタンをクリックしてフォームフィールドを変更するにはどうすればよいですか?

分類Dev

react jsのボタンをクリックするたびに入力フィールドを表示するにはどうすればよいですか?

分類Dev

JQuery関数でBootstrapModalの特定のボタンがクリックされたかどうかを確認するにはどうすればよいですか?

分類Dev

クリックされたボタンを確認するにはどうすればよいですか?

分類Dev

描画された線がフォーム領域の外に出ていないことを確認するにはどうすればよいですか?

分類Dev

ユーザーフォームでチェックボックスがオンになっていることを確認するにはどうすればよいですか?

分類Dev

戻るボタンが2回クリックされたときにXamarin.Androidアプリを終了させるにはどうすればよいですか(クリック間のメッセージを確認してください)?

分類Dev

Reactでボタンがクリックされたときに入力フィールドの任意の場所にテキストを直接挿入するにはどうすればよいですか?

分類Dev

ActionBarSherlockの戻るボタンがクリックされたかどうかを確認するにはどうすればよいですか?

分類Dev

バックエンドでレンダリングされたフロントエンドルートにアクセスするユーザーが認証されていることを確認するにはどうすればよいですか?

分類Dev

フォームボタンが何度も非常に速くクリックされるのを防ぐにはどうすればよいですか?

分類Dev

PHPとJAVASCRIPT-各入力フィールドに接続されているボタンをクリックした後、複数の入力フィールドから値を取得するにはどうすればよいですか?

分類Dev

クリックしたときに入力のテキストが残るフォームを作成するにはどうすればよいですか?

分類Dev

Excelユーザーフォーム-クリックするとTrueの値を入力し、クリックしないとFalseの値を入力するようにコマンドボタンをコーディングするにはどうすればよいですか?

分類Dev

フォームのテキストボックス/入力が現在html / phpに入力されているかどうかを確認する方法

分類Dev

最初に入力フィールドとそのラベルを最初に非表示にしてから、ボタンをクリックすると表示されるようにするにはどうすればよいですか?

Related 関連記事

  1. 1

    新しい自動スケーリングされたAzureApp Serviceインスタンスがトラフィックを処理する前にウォームであることを確認するにはどうすればよいですか?

  2. 2

    ユーザーがXamarinフォームに入力していることを確認するにはどうすればよいですか?

  3. 3

    すべてのフィールドがphpで入力されていることを確認するにはどうすればよいですか?

  4. 4

    メソッドでボタンがクリックされているかどうかを確認するにはどうすればよいですか?

  5. 5

    ボタンがクリックされたときにフォームをクリアするにはどうすればよいですか?

  6. 6

    jQueryでボタンが複数回クリックされているかどうかを確認するにはどうすればよいですか?

  7. 7

    Puppeteerのナビゲーションボタンをクリックするとnullが返されますか?クリックされている機能を確認するにはどうすればよいですか?

  8. 8

    ポリマー1.0の用紙入力でEnterキーが押されていることを確認するにはどうすればよいですか

  9. 9

    ボタンをクリックして入力にフォーカスしたときに、USB HIDデバイスが接続されたWebビューにソフトキーボードを表示するにはどうすればよいですか?

  10. 10

    ボタンがクリックされていないかどうかを確認するにはどうすればよいですか

  11. 11

    ラジオボタンがクリックされているかどうかを確認するにはどうすればよいですか?

  12. 12

    ボタンがクリックされているかどうかを確認するにはどうすればよいですか?

  13. 13

    送信ボタンをクリックした後、ページでラジオボタンがチェックされていることを確認するにはどうすればよいですか?

  14. 14

    REACT.jsのボタンをクリックしてフォームフィールドを変更するにはどうすればよいですか?

  15. 15

    react jsのボタンをクリックするたびに入力フィールドを表示するにはどうすればよいですか?

  16. 16

    JQuery関数でBootstrapModalの特定のボタンがクリックされたかどうかを確認するにはどうすればよいですか?

  17. 17

    クリックされたボタンを確認するにはどうすればよいですか?

  18. 18

    描画された線がフォーム領域の外に出ていないことを確認するにはどうすればよいですか?

  19. 19

    ユーザーフォームでチェックボックスがオンになっていることを確認するにはどうすればよいですか?

  20. 20

    戻るボタンが2回クリックされたときにXamarin.Androidアプリを終了させるにはどうすればよいですか(クリック間のメッセージを確認してください)?

  21. 21

    Reactでボタンがクリックされたときに入力フィールドの任意の場所にテキストを直接挿入するにはどうすればよいですか?

  22. 22

    ActionBarSherlockの戻るボタンがクリックされたかどうかを確認するにはどうすればよいですか?

  23. 23

    バックエンドでレンダリングされたフロントエンドルートにアクセスするユーザーが認証されていることを確認するにはどうすればよいですか?

  24. 24

    フォームボタンが何度も非常に速くクリックされるのを防ぐにはどうすればよいですか?

  25. 25

    PHPとJAVASCRIPT-各入力フィールドに接続されているボタンをクリックした後、複数の入力フィールドから値を取得するにはどうすればよいですか?

  26. 26

    クリックしたときに入力のテキストが残るフォームを作成するにはどうすればよいですか?

  27. 27

    Excelユーザーフォーム-クリックするとTrueの値を入力し、クリックしないとFalseの値を入力するようにコマンドボタンをコーディングするにはどうすればよいですか?

  28. 28

    フォームのテキストボックス/入力が現在html / phpに入力されているかどうかを確認する方法

  29. 29

    最初に入力フィールドとそのラベルを最初に非表示にしてから、ボタンをクリックすると表示されるようにするにはどうすればよいですか?

ホットタグ

アーカイブ