コンポーネントを作成しよう
📄 ファイルを追加しよう
このレッスンでは、Home画面
、Search画面
、ManageRooms画面
に必要なコンポーネントを作成していきます。
以下 のようなファイル構造になるよう、ディレクトリとファイルを追加しましょう。
frontend/
├─ __mocks__/
├─ assets/
│ ├─ css/
│ ├─ img/
│ └─ js/
│ ├─ components/
+ │ │ ├─ AddRoom.js
+ │ │ ├─ FormDate.js
│ │ ├─ NavBar.js
+ │ │ └─ Room.js
│ ├─ near/
│ └─ pages/
│ ├─ GuestBookedList.js
│ ├─ Home.js
│ ├─ ManageBookings.js
│ ├─ ManageRooms.js
│ └─ Search.js
├─ App.js
├─ index.html
└─ index.js
🗓 日付を入力するフォームを作成しよう
まずは、日付を入力できるフォームを実装します。
以下のコードを追加しましょう。
frontend/assets/js/components/FormDate.js
import { useState } from "react";
import Button from "react-bootstrap/Button";
import Col from "react-bootstrap/Col";
import Form from "react-bootstrap/Form";
import Row from "react-bootstrap/Row";
import { useNavigate } from "react-router-dom";
const FormDate = () => {
const navigate = useNavigate();
const [date, setDate] = useState("");
const isFormFilled = () => date;
return (
<Form>
<Row
className="justify-content-center"
style={{ marginTop: "50px", marginBottom: "50px" }}
>
<Col xs="auto">
<Form.Control
type="date"
htmlSize="10"
onChange={(e) => {
setDate(e.target.value);
}}
/>
</Col>
<Col xs="auto">
<Button
variant="secondary"
// 検索する日付が入力されないとボタンを押せないように設定
disabled={!isFormFilled()}
// URLに入力された日付を入れて遷移先へ渡す
onClick={() => navigate(`/search/${date}`)}
>
Search
</Button>
</Col>
</Row>
</Form>
);
};
export default FormDate;
このようなフォームとボタンが実装されます。
追加した内容を見ていきましょう。
フォームの作成には、React BootstrapのFormを使用しました。type='date'
を指定することで、日付を入力するフォームができます。
指定した日付で部屋を探せるように、フォームの横にSearch ボタン実装しました。
<Button
variant="secondary"
// 検索する日付が入力されないとボタンを押せないように設定
disabled={!isFormFilled()}
// URLに入力された日付を入れて遷移先へ渡す
onClick={() => navigate(`/search/${date}`)}
>
Search
</Button>
ボタンの作成には、React BootstrapのButtonを使用しました。disabled=条件
を指定することで、ここでは日付が入力されないとボタンが押せないように設定しています。
Search ボタン を押すと、Search
画面へ遷移するように指定しています。この時、入力された日付(date
)を含めたパスを指定しています。この方法で遷移先のSearch.js
に日付を渡し、Search.js
ではパスから日付を取得するように実装します。