kintone-React自習 6日目「React-kintone連携チュートリアル の作成」入力フォームの作成

Reactのフォーム画面を作成し、kintoneのレコードを表示・更新するチュートリアル を作成する。

チュートリアル 構成

作成するチュートリアルの構成。

1. 入力フォームを作成する
2. kintoneアプリを作成する
3. 入力フォームにkintoneのレコードを表示する
4. 入力フォームからkintoneのレコードを更新する

1. Reactで入力フォームを作成する

HTMLの入力フォームを作成する。

CodeSandboxなどを使ってオンラインでデザインを確認しながら入力フォームを作っていきます。

元のApp.js

import "./styles.css";

export default function App() {
  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <h2>Start editing to see some magic happen!</h2>
    </div>
  );
}

編集後のApp.js

import "./styles.css";
import React, { useState, useRef } from "react";

export default function App() {
  const [searchString, setSearchString] = useState("");
  const [numberOfDeliveryNote, setNumberOfDeliveryNote] = useState("");
  const [itemName, setItemName] = useState("");
  const [statusOfDelivery, setStatusOfDelivery] = useState("未納品");
  const [orderingQuantity, setOrderingQuantity] = useState(0);
  const [deliveryDate, setDeliveryDate] = useState("2022-01-01");
  const [deliveryQuantity, setDeliveryQuantity] = useState(0);
  const [isSearch, setIsSearch] = useState(false);
  const deliveryQuantityInput = useRef(null);
  const numberOfDeliveryInput = useRef(null);
  const confiremButton = useRef(null);

  const fetchRecord = (number_of_delivery_note) => {
    const record = {
      number_of_delivery_note: "12345991",
      status_of_delivery: "納品済",
      item_name: "BA-2343",
      ordering_quantity: "24",
      item_number: "77788",
      ordering_date: "2022-01-10",
      delivery_quantity: "25",
      delivery_date: "2022-02-01",
      order_backlog: 0
    };
    return record;
  };
  const handleSubmit = (event) => {
    console.log(event);
    event.preventDefault();
    confiremButton.current.focus();
    setIsSearch(true);
    const record = fetchRecord(searchString);
    setTimeout(() => {
      const {
        number_of_delivery_note,
        item_name,
        status_of_delivery,
        ordering_quantity,
        delivery_quantity,
        delivery_date
      } = record;
      setNumberOfDeliveryNote(number_of_delivery_note);
      setItemName(item_name);
      setStatusOfDelivery(status_of_delivery);
      setOrderingQuantity(ordering_quantity);
      setDeliveryQuantity(delivery_quantity);
      setDeliveryDate(delivery_date);
      setIsSearch(false);
      setSearchString("");
    }, 5000);
  };
  const handleClick = (event) => {
    console.log(event);
    event.preventDefault();
    if (event.target.value === "confirmation") {
      console.log(event.target.value);
      alert("保存しました");
      numberOfDeliveryInput.current.focus();
    }
  };
  return (
    <div className="App">
      <h1>検収処理</h1>
      <h2>{isSearch ? "Start searching..." : ""}</h2>
      <div>
        <form onSubmit={handleSubmit}>
          <span>納品書番号入力:</span>
          <input
            type="text"
            name="search"
            value={searchString}
            ref={numberOfDeliveryInput}
            autoFocus={false}
            onChange={(event) => setSearchString(event.target.value)}
          />
          <button type="submit" name="search" value="search">
            検索
          </button>
          <div>
            <span>納品書番号:</span>
            <input type="label" defaultValue={numberOfDeliveryNote} />
          </div>
          <div>
            <label htmlFor="deliveryQuantity">納品数</label>
            <input
              name="number"
              type="number"
              ref={deliveryQuantityInput}
              value={deliveryQuantity}
              onChange={(event) => setDeliveryQuantity(event.target.value)}
            />
            <button
              type="button"
              name="confirmation"
              value="confirmation"
              ref={confiremButton}
              onClick={handleClick}
            >
              検収確認
            </button>
          </div>
        </form>
        <div>納品書番号:{numberOfDeliveryNote}</div>
        <div>ステータス:{statusOfDelivery}</div>
        <div>品名:{itemName}</div>
        <div>発注数:{orderingQuantity}</div>
        <div>納品日:{deliveryDate}</div>
      </div>
    </div>
  );
}
画面キャプチャ

参考:

CodeSandbox


いいなと思ったら応援しよう!