🖥

React – フォームを使って axiosでPOSTリクエストする ( + radio で選択する )

に公開

httpbinはPOSTしたリクエスト内容に応じてレスポンスをJSONを返してくれるので、そのレスポンスを画面に表示する

コード例

example.tsx


import './App.scss';
import axios from "axios";

import { useForm } from "react-hook-form";
import { useState } from 'react'

const Example = () => {
  const { register, handleSubmit } = useForm();

  const items = ["item1", "item2", "item3", "item4"]
  const [val, setVal] = useState('item1');

  const requestURL = "https://httpbin.org/post";
  const [getData, setResponse] = useState({ form: { content: "", item: "" }});

  const onSubmit = (data: any) => {
    axios.post(requestURL, new URLSearchParams(data)).then((response) => {
      setResponse(response.data);
    });
  };
  const handleChange = (e: any) => {
    setVal(e.target.value);
  };

  return (
    <div className="App">
      <h1>POST</h1>
      <form onSubmit={handleSubmit(onSubmit)}>
        <div>
          <label htmlFor="content">content</label>
          <input id="content" {...register('content')} />
        </div>
        <div>
        </div>
        {items.map((item) => {
          return (
            <div key={item}>
              <input
                id={item}
                type="radio"
                {...register('item')}
                value={item}
                onChange={handleChange}
                checked={item === val}
              />
              <label htmlFor={item}>{item}</label>
            </div>
          );
        })}
        <button type="submit">Submit</button>
      </form>
      <div>
        <h2>Content</h2>
          <p>{getData['form']['content']}</p>
        <h2>Item</h2>
          <p>{getData['form']['item']}</p>
      </div>
    </div>

  );
}

export default Example;

実行例

画面上がフォーム
画面下でhttpbinからの応答一部を表示している

<img width="1440" alt="image" src="https://user-images.githubusercontent.com/13635059/211244822-a5609db5-33f8-40f4-a469-5d053ee08a9c.png">

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2023-01-09

Discussion