2021년 조사 결과, 가장 많이쓰는 웹 프레임워크가 리액트임.
https://insights.stackoverflow.com/survey/2021#most-popular-technologies-language
프레임 워크란 ? 필요한 기능이 이미 만들어져 있는 기본 틀
웹 페이지를 정의하는 하나의 객체
웹페이지와 실제 돔 사이에서 중간 매개체 역할을 함
가상의 돔이 있어서 특정 변화가 생기면 변화가 생긴 그 부분을 찾아 바꿔줌
컴포넌트 : 리액트에서 특정 부분이 어떻게 생길지 정하는 선언체
리액트는 모든 페이지가 컴포넌트로 구성되어 있고, 하나의 컴포넌트는 또 다른 여러 컴포넌트의 조합으로 구성될 수 있다.
node.js가 설치되어 있어야함
https://nodejs.org/ko/
다운로드 후 터미널창에 명령어node-v
치면 버전 확인 가능
yarn 패키지 도구 설치
node.js를 설치하면 자동으로 npm을 사용할 수 있는데 npm을 대체할 수 있으며 npm보다 빠르고 효율적인 시스템을 제공하는 개선된 yarn을 설치한다.
https://classic.yarnpkg.com/en/docs/install#mac-stable
** 맥북 사용시 homebrew먼저 설치하고 해줘야함
brew install yarn
: yarn 설치
yarn --version
: yarn 설치 확인
create-react-app 프로젝트 이름
: 리액트 프로젝트 생성
리액트 프로젝트 생성시,
webpack(웹팩), babel(바벨) -> 자바스크립트 컴파일러(언어 해석기)
알아서 설치해줌
이때, 내가 새로 만든 폴더에 하는 것이 좋음
ex. desktop에 react폴더 안에 설치
해당 프로젝트 폴더로 이동하여 yarn start
명령어 치기
리액트 실행창이 나옴
안나오면 주소창에 http://localhost:3000/ 쳐보기
src폴더 안에 app.js의 구조를 크게 보면
function App(){
}
이렇게 되어 있는데 이것이 함수형 컴포넌트이며 앱이라는 컴포넌트를 만들어 주는 것이다.
import React from 'react';
function App(){
return(
<div>
<div>안녕하세요</div>
<div>리액트 공부중입니다.</div>
</div>
)
}
export default App;
div태그를 쓰기 싫다면 <fragment>
태그 쓸 수 있다.
단, fragment사용시
import React, { Fragment } from 'react';
해줘야한다.
<></>
이렇게 빈 태그로 묶어줘도 됨
import React from 'react';
function App(){
return(
<>
<div>안녕하세요</div>
<div>리액트 공부중입니다.</div>
</>
)
}
export default App;
❗️ 만약 아래의 코드처럼 하나의 태그로 감싸 주지 않으면 ?
import React from 'react';
function App(){
return(
<div>안녕하세요</div>
<div>리액트 공부중입니다.</div>
)
}
export default App;
import React from 'react';
function App(){
const name = "이지수"
return(
<>
<div>안녕하세요</div>
<div>리액트 공부중입니다.</div>
<div>
<p>{name}</p>
{alert( name )}
</div>
</>
)
}
export default App;
JSX밖의 주석 - return문 밖
-> //, /**/ 둘다 사용 가능
JSX안의 주석 - return문 안
-> {/**/}만 사용 가능
✔️ 삼항 연산자 사용하기
(조건식)?(참표현식):(거짓표현식)
import React from 'react';
function App(){
const name = "이지수"
return(
<>
<div>
{
(name === "이지수")
?(<h1>본인입니다.</h1>)
:(<h1>본인이 아닙니다.</h1>)
}
</div>
</>
)
}
export default App;
✔️ 짧게 조건문 사용하기
(조건식)&&(참표현식)
ex) { (name === "이지수") ? ( <h1>본인입니다.</h1>) : null }
=> { (name === "이지수") && <h1>본인입니다.</h1> }
&&연산자로 조건부 렌더링 할 수 있는 이유는 리액트에서 false를 렌더링 할 때는 null과 마찬가지로 아무것도 나타내지 않기 때문
단, 예외적으로 falsy한 값인 0은 예외적으로 화면에 나타남
❗️ but,undefined만 반환하여 렌더링하는 상황 만들면 X
** 각 조건식을 괄호로 감싸는 것은 필수사항이 아님
여러줄로 될때는 감싸고 아니면 안감싸고 그런식으로 사용하면 됨
css에서 -로 쓰던 것 대신 카멜표기법으로 사용
ex.background-color => backgroundColor
✔️ 변수에 담아서 스타일 주기
import React from 'react';
function App(){
const style = {
backgroundColor : "coral",
color : "beige",
fontWeight:"bold"
};
return(
<>
<h1 style = {style}>
스타일 주기
</h1>
</>
)
}
export default App;
✔️ 인라인으로 스타일 직접 지정하기
function App(){
return(
<>
<div style = {{
backgroundColor : "coral",
color : "beige",
fontSize : "20px",
fontWeight:"bold"
}}>
하잉
</div>
</>
)
}
export default App;
app.js
import React from 'react';
import './App.css';
function App(){
return(
<>
<h1 className = "test">
외부스타일시트의 class가져오기
</h1>
</>
)
}
export default App;
app.css
.test{
background-color: rgb(220, 185, 149);
color : rgb(160, 83, 0);
font-size: 30px;
margin-bottom: 20px;
text-align: center;
}