이 코드는 React Bootstrap을 사용하여 폼을 만들고 있습니다. 아직 React와 Bootstrap이 익숙하지 않은 초급 개발자라면, 하나씩 차근차근 설명해 줄게요. 😊
🔹 1. 코드 개요
import { Button, Form, InputGroup } from "react-bootstrap";
react-bootstrap
라이브러리에서Button
,Form
,InputGroup
컴포넌트를 가져옵니다.- 이 라이브러리는 기본 Bootstrap 스타일을 React에서 컴포넌트 형태로 쉽게 사용할 수 있도록 만든 라이브러리입니다.
function App(props) {
const onSubmitInsert = props.onSubmitInsert;
props
로 부모 컴포넌트에서 전달된onSubmitInsert
함수를 받습니다. (하지만 현재 코드에서는 사용되지 않음)
console.log('하하하');
- 콘솔에
"하하하"
가 출력됩니다. (디버깅용으로 넣어둔 것 같아요.)
🔹 2. <Form>
태그
<Form action="#" method="post">
<form>
태그와 동일한 역할을 합니다.action="#"
→ 폼 데이터를 어디로 보낼지를 정하는데, 현재는#
라서 아무 곳에도 전송되지 않음.method="post"
→ POST 요청으로 서버에 데이터를 보낼 때 사용됨.
🔹 3. <InputGroup>
(입력 필드 묶음)
<InputGroup size="sm" className="mb-3">
<InputGroup.Text id="basic-addon1">이름</InputGroup.Text>
<Form.Control type="text" name="name" aria-describedby="basic-addon1 inputGroup-sizing-sm" />
</InputGroup>
📌 설명
<InputGroup>
→ 하나의 입력 필드와 설명을 묶는 Bootstrap 스타일의 그룹.<InputGroup.Text>
→ 입력 필드 앞쪽에 설명을 붙이는 역할 ("이름"
,"가격"
등)<Form.Control>
→ 실제 입력 필드 (<input>
태그와 같음)type="text"
→ 텍스트 입력 필드name="name"
→ 폼 데이터를 서버로 보낼 때name
값으로 전송됨.aria-describedby="basic-addon1 inputGroup-sizing-sm"
→ 웹 접근성(Accessibility)을 위한 속성으로,id="basic-addon1"
을 참조하여 이 필드가 어떤 정보를 포함하는지 알려줌. (화면 낭독기 사용자를 위해)
🛠 렌더링되는 HTML
<div class="input-group input-group-sm mb-3">
<span class="input-group-text" id="basic-addon1">이름</span>
<input type="text" class="form-control" name="name" aria-describedby="basic-addon1 inputGroup-sizing-sm">
</div>
🔹 4. <Form.Select>
(드롭다운)
<Form.Select size="sm" name="category" aria-label="카테고리 선택">
<option>카테고리를 선택해 주세요.</option>
<option value="bread">빵</option>
<option value="beverage">음료수</option>
</Form.Select>
📌 설명
<Form.Select>
→<select>
태그와 동일한 역할.size="sm"
→ 작은 크기의 드롭다운 스타일 적용.name="category"
→ 선택된 값이category
라는 이름으로 전송됨.aria-label="카테고리 선택"
→ 접근성 속성(웹 낭독기 사용자에게 설명 제공).
🛠 렌더링되는 HTML
<select class="form-select form-select-sm" name="category" aria-label="카테고리 선택">
<option>카테고리를 선택해 주세요.</option>
<option value="bread">빵</option>
<option value="beverage">음료수</option>
</select>
🔹 5. <Form.Control as="textarea">
(텍스트 입력창)
<Form.Control name="description" as="textarea" style={{ height: '100px' }} />
📌 설명
as="textarea"
→<input>
이 아니라<textarea>
로 렌더링됨.style={{ height: '100px' }}
→ 높이를 100px로 지정.name="description"
→ 폼 제출 시description
이라는 이름으로 데이터가 전송됨.
🛠 렌더링되는 HTML
<textarea class="form-control" name="description" style="height: 100px;"></textarea>
🔹 6. <Button>
(제출 버튼)
<Button type="submit" value={'생성'}>생성</Button>
📌 설명
<Button>
은 Bootstrap 스타일이 적용된 버튼.type="submit"
→ 버튼 클릭 시 폼 제출.value={'생성'}
→ HTML 버튼의value
속성이"생성"
이지만, 사실상 버튼 내부의"생성"
텍스트와 동일한 역할을 하므로 불필요.
🛠 렌더링되는 HTML
<button type="submit" class="btn btn-primary">생성</button>
🔹 7. props.onSubmitInsert
현재 onSubmitInsert
라는 이벤트 핸들러가 props
로 전달되었지만, 코드에서는 사용되지 않음.
만약 폼 제출 시 이벤트를 실행하려면 onSubmit
속성을 추가해야 함.
✅ 수정된 코드 예시
<Form action="#" method="post" onSubmit={onSubmitInsert}>
이렇게 하면, 부모 컴포넌트에서 전달한 onSubmitInsert
함수가 실행됨.
🔥 정리
태그 | 설명 |
---|---|
<Form> |
폼을 감싸는 태그 (<form> 과 동일) |
<InputGroup> |
입력 필드를 그룹으로 묶음 |
<InputGroup.Text> |
입력 필드 앞에 설명(레이블) 추가 |
<Form.Control> |
기본 입력 필드 (<input> 과 동일) |
<Form.Select> |
드롭다운 (<select> 과 동일) |
<Button> |
버튼 (<button> 과 동일) |
as="textarea" |
<input> 대신 <textarea> 로 렌더링 |
이제 코드를 보면 구조를 좀 더 이해할 수 있을 거예요! 😃
더 궁금한 부분이 있으면 질문 주세요! 🚀
'웹 개발 > 프론트엔드 개발' 카테고리의 다른 글
반환값이 JSX인 모든 경우의 수 정리 (0) | 2025.02.12 |
---|---|
250212 복습4 (0) | 2025.02.12 |
객체와 컴포넌트의 차이 (0) | 2025.02.12 |
React의 "재렌더링(Re-rendering)"과 "재조정(Reconciliation)" 개념 정리 (0) | 2025.02.12 |
React 컴포넌트와 일반 함수의 모든 가능한 경우의 수 정리 (0) | 2025.02.12 |