yarn create react-app 폴더이름
: CRA와 같이 리액트 프로젝트를 풀 세팅해주는 빌드도구, CRA대신 Esbuild를 사용해서 속도가 빠르다.
yarn create vite my-first-vite-react-app --template react
:컴포넌트를 통해 UI를 재사용이 가능한 개별적인 조각으로 나누고 재사용이 가능하게끔 만든다.
JavaScript함수와 유사
props라고 하는 임의의 입력을 받은 후 화면에 어떻게 표시되는지 기술하는 엘리먼트를 반환한다.
리액트 컴포넌트를 표현하는 방법
컴포넌트 보는 방법
// 컴포넌트 밖, 내가 필요한 파일을 가져오는 영역
import React from "react";
const App = () =>{
// 자바스크립트를 쓸 수 있는 영역
return(
<div>
{/* JSX를 쓸 수 있는 영역 */
</div>}
)
}
// 내가 만든 컴포넌트를 밖으로 내보내는 영역
export default App;
import React from "react";
function App() {
// <---- 자바스크립트 영역 ---->
const handleClick = () => {
alert("안녕하세요!");
};
return (
/* <---- HTML/JSX 영역 ---->*/
<div
style={{
height: "100vh",
display: " flex",
flexDirection: "column",
justifyContent: "center",
alignItems: "center",
}}
>
{}
<span>이것은 제가 만든 App 컴포넌트 입니다.</span>
<button onClick={handleClick}>클릭!</button>
</div>
);
}
export default App;
연결하는 방법
//할아버지, 엄마, 자식
function App() {
return (
<div>
안녕하세요!
<Grandfa />
<Mother />
<Child />
</div>
);
}
export default App;
function Grandfa() {
return <div>할아버지</div>;
}
function Mother() {
return <div className="mother">엄마</div>;
}
function Child() {
return <div>나는 자식입니다.</div>;
}
:리액트 문법
자바스크립트 문법이지만 HTML을 가지고 있다.
JSX 에서의
는 정확히는 React요소이다.rafce
import React from "react";
const App = () => {
const NUMBER = 1000;
const pTagStyle = {
color: "orange",
};
return (
<>
<div>
<input type="text" />
<button>{NUMBER}</button>
<p style={pTagStyle}>sdfdsf</p>
</div>
</>
);
};
export default App;
//프랍 드릴링
// src/App.jsx
import React from "react";
function App() {
return <GrandFather />;
}
function GrandFather() {
const name = "르탄이";
return <Mother name={name} />;
}
function Mother(props) {
const name = props.name;
return <Child name={name} />; // 💡"props로 name을 전달했다."
}
function Child(props) {
const name = props.name;
return <div>{name}</div>;
}
export default App;
// src/About.jsx
import React from "react";
import Layout from "./components/Layout";
function App() {
return (
<Layout>
<div>여긴 App의 컨텐츠가 들어갑니다.</div>
</Layout>
);
}
export default App;
function Layout(props) {
const children = props.children;
return (
<main>
<header></header>
{children}
<footer></footer>
</main>
);
}
import React from "react";
const App = () => {
const title = "재목";
return (
<div>
<h1>추출테스트</h1>
<Todo title={title} />
</div>
);
};
const Todo = ({ title }) => {
return (
<div>
<h3>{title}</h3>
투두입니다.
</div>
);
};
export default App;
// 바꿀변수를 이용하여 값을 바꿔준다음 변수를 활용
// 제어 컴포넌트를 쓰는 것이 좋다.
const [변수, 바꿀변수] = useState()
import React from "react";
const App = () => {
const [text, setText] = useState("");
const handleInputChange = (event) => {
setText(event.target.value);
};
console.log(text);
return (
<div>
<input type="text" onChange={handleInputChange} value={text} />
{text}
</div>
);
};
export default App;
: 메모리에 있는 값을 변경할 수 없는 것
1-1. 리액트(선언형프로그래밍)
렌더링
: 리액트에서 렌더링이란 컴포넌트가 현재 props와 state의 상태에 기초하여 UI를 어떻게 구성할 지 컴포넌트에게 요청하는 작업을 의미한다.
렌더링을 일으킨다. (triggering)
렌더링을 한다.(rendering)
렌더링 결과 (commit)
: 새로운 요청사항이 들어오는 것
: 두가지는 다른 것이며 렌더링이 완료된 이후에 리액트렌더링이 일어난다. 이 프로세스를 브라우저 렌더링이라고 이야기하며 혼동을 피하기 위해서 페인팅이라고도 한다.
리엑트나 뷰는 가상돔을 사용해서 원하는 화면에 브라우저를 그려줌
자체적으로 효율적인 알고리즘을 사용해서 그리기 때문에 속도가 훨씬 빠르다.
API : HTML요소에 접근해서 수정할 수 있는 함수
실제돔과 가상돔은 거의 동일한 형태를 가지게 된다
실제 DOM은 아니지만 객체 형태로 메모리에 저장되기 때문에 실제 DOM에 저장하는 것보다 훨씬 빠르게 조작을 수행할 수 있다.
리액트의 2가지 가상 DOM
: 차이를 검토하는 순서
원래가지고 있는 곳과 변경된 부뿐의 변화를 파악