1. 컴포넌트에 대해
- 컴포넌트란?
- 컴포넌트 사용법
- 갑자기 든 의문점
2. 동적인 UI 만들기
- 삼항연산식
- 글을 누르면 상세페이지(모달창)가 뜨게끔 하려고 한다! (완전히 페이지가 전환되는 것은 후에, router를 배우게 되면 할 것임)
※ 팝업창 VS 모달창
- 팝업창 : 현재 열려있는 브라우저 페이지에 또 다른 브라우저 페이지를 띄우는 것을 말한다.
- 모달창 : 기존의 브라우저 페이지 위에 새로운 윈도우 창이 아닌, 레이어를 까는 것을 말한다
- 컴포넌트를 배운다면, 처음보는 사람도, <MyModal/>이라고 호출되는 것을 보고,
"아, 모달창이구나!" 하며, 쉽게 알 수 있으니, 배워보도록 하자!
컴포넌트에 대해
🤷♂️ 컴포넌트란 ?
- 리액트로 만들어진 앱을 이루는 최소한의 단위로서, 보통 리액트로 만든 웹(앱)들은 여러 개의 컴포넌트들로 구성한다.
- 컴포넌트에는 ① 함수형 컴포넌트 ② 클래스형 컴포넌트 두가지 종류가 있다.
- 함수형 컴포넌트
- 함수형 컴포넌트는 말 그대로 자바스크립트의 "함수(function)" 기반 컴포넌트로,
함수를 선언하듯이 function 으로 컴포넌트를 정의하고, return 문에 JSX 코드를 반환한다. state, lifeCycle 관련 기능사용이 불가능하고메모리 자원을 덜 사용한다.
-> 이제 가능해짐! 따라서, 직관적인 코드와 메모리효율 측면에서 너무나 유용하기에,
리액트에서도 함수형컴포넌트 사용을 적극 권장한다.
function App() { return ( // jsx ) }
const App = () => { return ( // jsx ) }
- 함수형 컴포넌트는 말 그대로 자바스크립트의 "함수(function)" 기반 컴포넌트로,
- 클래스형 컴포넌트
- 클래스 컴포넌트는 말 그대로 자바스크립트의 "클래스(class)" 기반 컴포넌트로,
class로 정의하고, render() 함수에서 JSX 코드를 반환한다. - class 키워드가 필수로 들어가며 Component로 상속을 받아야하고 render 메서드가 반드시 있어야한다.
import React, { Component } from 'react' class App extends Component{ render() { return ( // jsx ); } }
- 클래스 컴포넌트는 말 그대로 자바스크립트의 "클래스(class)" 기반 컴포넌트로,
- 함수형 컴포넌트
컴포넌트 사용법
- 글을 누르면 상세페이지가, 모달창(레이어창)으로 뜨게끔 할것이다!
<div className="modal">
<h3>제목</h3>
<span>날짜</span>
<span>상세내용</span>
</div>
- 위 내용을 모달창으로 추가하도록 할건데,
이 때, 간단한 모달창 내용인데도 불구하고, 태그들이 너무 많아져서 더러워지는 경험을 겪을 수 있다.
그럴 때 사용하는것이 component 문법이다. - (함수형) 컴포넌트 만드는 법
- function 을 선언한다
- app() funtion{} 밖에다가 만들 것!!!
- 맨 첫번째 글자는 대문자로 만들것!
(리액트는 소문자로 시작하는 컴포넌트를 DOM 태그로 취급하기 때문이다.)
- return() 안에 html 담고
function Modal(){ return( <div className="modal"> <h3>제목</h3> <span>날짜</span> <span>상세내용</span> </div> ) }
- <컴포넌트명></컴포넌트명> (or <컴포넌트명/>) 으로 호출하기
function App() { return( <Modal><Modal/> // 혹은 <Modal/>로도 호출 가능하다. ) }
- function 을 선언한다
( 우리가 코딩하는 index.js의 App()이라는 것도 컴포넌트 이었다! )
※ 참고 : div를 같은 병렬 공간에 쓰고싶을때는
- 의미없는 div를 선언하여 그 안에다가 쓰거나
import "./App.css"; function App() { return ( <div className="의미없는_div"> <div> </div> <Modal></Modal> </div> ); }
- 빈 꺽쇠 <> </>를 사용하기 -> fragment라고 일컫음
import "./App.css"; function App() { return ( <> <div> </div> <Modal></Modal> </> ); }
🤷♂️ 갑자기 든 의문점
✏️ 왜 App.js에 있는 화면이 메인으로 띄워질까?
- 리액트는 번들러를 활용하는데, 리액트에서는 webpack이라는 번들러를 주로 사용한다.
- node_modules에 가 보면 webpack이 알아서 설치되어 있음을 확인할 수 있다.
※ 번들러
- 번들러에는 webpack, Parcel, browserfiy 등이 있다.
- 번들러를 사용하면 import(또는 require)로 모듈을 불러왔을 때 불러온 모듈을 모두 합쳐서 하나의 파일을 생성해 준다.
- 최적화 과정에서 여러 개의 파일로 분리할 수도 있다.
- 리액트에서는 주로 webpack을 사용한다.
- webpack은 가장 처음으로 읽어들이는 entry point부터 시작하여, 필요한 모든 모듈을 다 불러온 뒤 번들(하나의 결과물)로 만들어,
한 파일로 합쳐서 bundle.js 에 저장하는 역할을 한다. - webpack 설정파일에 가 보면 entry point가 index.js로 정의되어 있을 것 이다!!
✏️ 어떨 때 컴포넌트를 쓰는가?
- 반복적인 html을 축약할 때!
- 큰 페이지들을 전환해야할 때, 혹은, 큰 페이지 자체를 컴포넌트로 만들 때!
- 자주 변경되는 UI들일 때!
동적인 UI 만들기
- 만든 모달(컴포넌트)창을, 동적인 UI로 만들어 보자!
- 만들기 전에 알아야할 지식 : 삼항연산자 (ternary operator)
조건식 ? true일때 실행할 것 : false일때 실행할 것
ex) age > 27 ? "틀딱" : "오우 MZ한데요?"
- 만들기 전에 알아야할 지식 : 삼항연산자 (ternary operator)
- 동적인 UI로 만드는 법
- html과 css로 미리 디자인을 완성시켜놓는다
- UI의 현재 상태를 state로 저장해 놓는다.
import "./App.css"; import { useState } from "react"; function App() { let [modal, setModal] = useState(false); return ( <> <div> 홈페이지 </div> <Modal></Modal> </> ); } function Modal(){ return ( <div className="modal"> <h3>제목</h3> <span>날짜</span> <span>상세내용</span> </div> ); } export default App;
- state에 따라 UI가 어떻게 보일지 작성한다.
import "./App.css"; import { useState } from "react"; function App() { let [modal, setModal] = useState(false); return ( <> <div onClick={()=>{ setModal(true)}}> 홈페이지 </div> { modal == true ? <Modal/> : null } </> ); } function Modal(){ return ( <div className="modal"> <h3>제목</h3> <span>날짜</span> <span>상세내용</span> </div> ); } export default App;
▶ 다시 누르면 안보이고 -> 보이고 -> 안보이고 . . .를 하는 홈페이지를 만들어보자!
더보기
import "./App.css";
import { useState } from "react";
function App() {
let [modal, setModal] = useState(false);
return (
<>
<div onClick={()=>{ modal == false ? setModal(true) : setModal(false)}}>
홈페이지
</div>
{
modal == true ? <Modal/> : null
}
</>
);
}
function Modal(){
return (
<div className="modal">
<h3>제목</h3>
<span>날짜</span>
<span>상세내용</span>
</div>
);
}
export default App;
함수, 클래스형 컴포넌트(1) : https://chanhuiseok.github.io/posts/react-4/
[React] React의 컴포넌트(Component) - 함수형, 클래스형 컴포넌트
컴퓨터/IT/알고리즘 정리 블로그
chanhuiseok.github.io
함수, 클래스형 컴포넌트(2) : https://life-with-coding.tistory.com/508
[React] React 컴포넌트란? React 앱을 구성하는 요소
📌 컴포넌트 (Component)란? 리액트는 화면에서 UI 요소를 구분할 때 '컴포넌트'라는 단위를 사용합니다. 쉽게 말하면 리액트에서 앱을 이루는 가장 작은 조각이라고 할 수 있고, 레고 블록으로 집
life-with-coding.tistory.com
'개발공부 > 리액트' 카테고리의 다른 글
React(5) 리액트 웹사이트 Github Pages로 배포하는 법 (0) | 2023.07.01 |
---|---|
React(4) 컴포넌트에게 state 값 전달하는방법 (0) | 2023.06.23 |
React(2) 리액트 state & onClick 사용법 (reference data type을 곁들인) (4) | 2023.06.10 |
React(1) MAC OS 리액트 개발환경 세팅 (0) | 2023.06.10 |
React(0) 리액트와 리액트 네이티브 개념 정리 (0) | 2023.06.03 |