👥Club/☁️9oormthon univ☁️
Udemy - React 핵심 - 컴포넌트, JSX, 속성, 상태 등
비엔 Vien
2025. 4. 27. 19:38
리액트 어플은 컴포넌트를 결합하여 만들어짐
로컬 플젝
npm install
npm run dev
(주소에서 볼수 있긔)
control+ c하면 작업 중단
컴포넌트
jsx는 리액트 컴포넌트
문서정렬 단축키 : shift + opt + F
function Header() {
return (
<header>
<img src="src/assets/react-core-concepts.png" alt="Stylized atom" />
<h1>React Essentials</h1>
<p>
Fundamental React concepts you will need for almost any app you are
going to build!
</p>
</header>
);
}
function App() {
return (
<div>
<Header />
<main>
<h2>Time to get started!</h2>
</main>
</div>
);
}
export default App;
중괄호 문법⭐️
JSX 안에서 JavaScript 코드를 쓰고 싶으면 중괄호 {}를 쓴다
children은 <> 사이 컴포넌트?
여기서 함수를 값으로 사용하고 싶기 떄문에 {handleClick}에서 절대 괄호를 추가하면 안됨
export default function TabButton({ children }) {
function handleClick() {
console.log("Hello World!");
}
return (
<li>
<button onClick={handleClick}>{children}</button>
</li>
);
}
useState
컴포넌트 안에서 “변하는 값(상태)“을 만들고, 그 값이 변하면 자동으로 컴포넌트를 다시 렌더링 해주는 React Hook
const [selectedTopic, setSelectedTopic] = useState();
...
//1. 페이지 처음
// • selectedTopic은 undefined야 (초기화 안 됨)
// • 그래서 이 부분이 실행돼:
{!selectedTopic ? (
<p>Please select a topic.</p>
) : (
<div id="tab-content">...</div>
)}
///2. 사용자가 버튼 클릭 (예: “Props” 버튼)
///버튼 컴포넌트에는 이렇게 연결돼 있어:
<TabButton
isSelected={selectedTopic === "props"}
onSelect={() => handleSelect("props")}
>
Props
</TabButton>
///버튼 누르면 이 함수가 호출돼:
function handleSelect(selectedButton) {
setSelectedTopic(selectedButton);
}
///여기서 selectedButton은 "props"!
///그래서 setSelectedTopic("props")가 호출되고,
///➡️ selectedTopic 값이 "props"로 바뀐다!
////3. selectedTopic이 바뀌면?
//// • React가 컴포넌트를 자동으로 다시 실행(렌더링) 시켜!
//// • 이제 selectedTopic은 "props"니까, 이 부분이 실행돼:
<div id="tab-content">
<h3>{EXAMPLES[selectedTopic].title}</h3>
<p>{EXAMPLES[selectedTopic].description}</p>
<pre>
<code>{EXAMPLES[selectedTopic].code}</code>
</pre>
</div>
////EXAMPLES["props"] 데이터를 기반으로 제목, 설명, 코드가 화면에 나타난다.
조건적 렌더링
조건에 따라 화면에 보일 내용을 다르게 렌더링하는 것
삼항연산자(? :)나 AND, if 등을 써서 렌더링을 조절
{!selectedTopic ? (
<p>Please select a topic.</p>
) : (
<div id="tab-content">
<h3>{EXAMPLES[selectedTopic].title}</h3>
<p>{EXAMPLES[selectedTopic].description}</p>
<pre>
<code>{EXAMPLES[selectedTopic].code}</code>
</pre>
</div>
)}