2024.02.06(화)
Tab.Container
를 사용하지 않으면 Nav.Link
마다 onClick
으로 Tab의 상태를 update해주고 해당 state에 따라 tab content를 보여주는 코드를 작성해야 함
import { Nav, Tab } from 'react-bootstrap';
const [activeTab, setActiveTab] = useState('tab1'); // 초기 탭 설정
return (
<Tab.Container activeKey={activeTab} onSelect={key => setActiveTab(key ?? "tab1")}>
<div>
<Nav variant="tabs" defaultActiveKey="tab1">
<Nav.Item>
<Nav.Link eventKey="tab1">제품 영양 정보</Nav.Link>
</Nav.Item>
<Nav.Item>
<Nav.Link eventKey="tab2">리뷰</Nav.Link>
</Nav.Item>
<Nav.Item>
<Nav.Link eventKey="tab3">교환</Nav.Link>
</Nav.Item>
</Nav>
</div>
<div>
<Tab.Content>
<Tab.Pane eventKey="tab1">
<h1>제품 영양 정보입니다.</h1>
</Tab.Pane>
<Tab.Pane eventKey="tab2">
<h1>리뷰 관련 정보입니다.</h1>
</Tab.Pane>
<Tab.Pane eventKey="tab3">
<h1>교환/반품 관련 정보입니다.</h1>
</Tab.Pane>
</Tab.Content>
</div>
</Tab.Container>
);
import { Tab, Tabs } from 'react-bootstrap';
return (
<Tabs
defaultActiveKey="tab1"
className="mb-3"
>
<Tab eventKey="tab1" title="제품 영양 정보">
<h1>제품 영양 정보입니다.</h1>
</Tab>
<Tab eventKey="tab2" title="리뷰">
<h1>리뷰 관련 정보입니다.</h1>
</Tab>
<Tab eventKey="tab3" title="교환">
<h1>교환/반품 관련 정보입니다.</h1>
</Tab>
</Tabs>
);
npm install styled-components
🔗import styled from 'styled-components';
const Button = styled.button<{ $primary?: boolean; }>`
/* Adapt the colors based on primary prop */
background: ${props => props.$primary ? "#BF4F74" : "white"};
color: ${props => props.$primary ? "white" : "#BF4F74"};
font-size: 1em;
margin: 1em;
padding: 0.25em 1em;
border: 2px solid #BF4F74;
border-radius: 3px;
`;
render(
<div>
<Button>Normal</Button>
<Button $primary>Primary</Button>
</div>
);
useEffect
Hook은 React class 기반 component에서의 life cycle method(componentDidMount
, componentDidUpdate
, componentWillUnmount
)와 유사한 역할을 수행하며, 하나의 API로 통합된 HookuseEffect
Hook 사용법import { useEffect } from 'react';
useEffect(setup, dependencies?)
setup
: 수행할 functionuseEffect
의 코드가 실행되기 전에 실행됨dependencies
(optional): reactive value(dependency)들의 배열Object.is
비교를 통해 이전 값과 비교됨component가 render될 때마다 실행됨
useEffect(() => {
// ...
}); // Always runs again
처음 render(mount)될 때에 딱 한번만 실행되고 이후에는 실행되지 않음
useEffect(() => {
// ...
}, []); // Does not run again (except once in development)
undefined
)useEffect
의 setup
에 넘겨서 일단 화면을 먼저 보여주고 계속 작업하도록 할 수 있음!서버에 요청 시 새로고침 없이 데이터를 주고 받을 수 있게 도와주는 기술
XMLHttpRequest
문법 사용 (옛날 방식)
fetch
문법 사용 (사용자가 명시적으로 response 객체를 json()
method를 사용하여 변환해주어야 함)
fetch('https://api.example.com/data')
.then(response => response.json()) // JSON으로 파싱
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
최신 외부 라이브러리 axios
사용 (자동으로 response 객체를 변환해줌) ✅
import axios from 'axios';
axios.get('https://api.example.com/data')
.then(response => console.log(response.data)) // 이미 JSON 형식으로 파싱된 데이터
.catch(error => console.error('Error:', error));
npm install axios
🔗props
를 사용하게 된다.