React를 배우기에 앞서... DOM과 Virtual DOM을 알아보자
각 HTML 엘리먼트에 대한 정보를 지니고 있는 JavaScript 객체
브라우저에서 실제로 보여지는 DOM이 아니라 메모리에 가상으로 존재하는 DOM
상태가 업데이트 되면 업데이트가 필요한 UI를 메모리에 있는 Virtual DOM에 렌더링을 하고
비교알고리즘을 사용해서 실제 브라우저에서 보여지고 있는 DOM과 Virtual DOM을 비교하여 업데이트가 필요한 부분에만 적용시킨다.
이로써 "UI를 어떻게 업데이트 할까?"의 고민보다는 UI를 어떻게 보여줄지에 대해 집중할 수 있게 되었다.
React
<div>Hello world</div>
단 !! 태그와 태그 사이에 별도의 내용이 없다면
<input />과 같이 태그를 바로 닫아줘도 된다.
❌ 잘못된 예 ❌
<div></div>
<p></p>
✅ 옳은 예 ✅
<div>
<div></div>
<p></p>
</div>
✅ fragment를 이용한 태그 감싸기 ✅
<>
<div></div>
<p></p>
</>
function Component() {
const description = "쉽지만 어렵다";
return (
<div>React는 {description}</div>
)
}
=> React는 쉽지만 어렵다
function Component() {
return (
<div clasName="my-class">클래스 이름은 className</div>
)
}
function Component() {
const styled = {
color: 'orange'
}
return (
<div style={styled}>style은 객체 형태로</div>
)
}
JSX 문법 에서는 삼항연산자를 사용한다.
{
1+1 === 2 ? (<div>정답</div>) : (<div>오답</div>)
// 조건이 true일 때만 보여준다.
1+1 === 2 && (<div>정답</div>)
}
장점
단점
Props
부모 컴포넌트에서 자식 컴포넌트로 전달해 주는 데이터
⭐️ 읽기전용⭐️
import "./styles.css";
import React, {useState} from 'react';
export default function App() {
const [number, setNumber] = useState(0);
const increase = () => {
setNumber(number + 1);
}
const decrease = () => {
setNumber(number - 1);
}
return (
<div className="App">
<p>간단한 Counter 예제</p>
<h1>{number}</h1>
<button onClick={increase}>+</button>
<button onClick={decrease}>-</button>
</div>
);
}
constructor -> render -> componentDidMount ->
(setState/props 바뀔 때) -> ComponentDidUpdate -> render ->
(부모가 자식 component를 없앨 때 ) -> componentWillUmmount -> 소멸
틀린 부분이 있거나 보충해야 할 내용이 있다면 댓글이나 DM(sungstonemin)으로 알려주시면 감사하겠습니다😄