ls (위치확인)
cd desktop (이동)
npx create-react-app 폴더명 (scaffolding 생성)
cd 폴더명 (생성한 폴더로 이동)
code . (vscode열기 : 설정필요)
npm install node-sass (사스 다운)
npm install react-router-dom axios prop-types gsap (리액트 실행 시 필요한 요소 한번에 다운로드 : 스펠링 주의)
package.json에서 확인 !
폰트파일 넣을때는 아래 4가지 확장자를 각각 넣어줘야 한다.
"emmet.includeLanguages": {
"javascript": "javascriptreact"
},
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[typescriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"editor.formatOnSave": true,
function Info(props){
return (
<div>{props.text1}</div>
<div>{props.text2}</div>
<div>{props.text3}</div>
<div>{props.text4}</div>
)
}
function Main(){
<>
<main>
<section className="main__cont">
<Info
text1="we provide"
text2="visual coding"
text3="solution"
text4="for you webs"
/>
</section>
</main>
</>
}
function Info(???){
return (
<div>{props.text1}</div> ????
<div>{props.text2}</div>
<div>{props.text3}</div>
<div>{props.text4}</div>
)
}
const textInfo = {
text1: "we provide",
text2: "visual coding",
text3: "solution",
text4: "for you webs",
};
function Main(){
<>
<main>
<section className="main__cont">
<Info
text1={textInfo.text1}
text2={textInfo.text2}
text3={textInfo.text3}
text4={textInfo.text4}
/>
</section>
</main>
</>
}
function Info({ text }) {
return <div>{text}</div>;
}
const textInfo = {
{ text: "we provide" },
{ text: "visual coding" },
{ text: "solution" },
{ text: "for you webs" }
};
function Main(){
<>
<main>
<section className="main__cont">
<div className="main__inner">
{textInfo.map((txt) => (
<Info text={txt.text} />
))}
</div>
</section>
</main>
</>
}
리액트 컴포넌트를 선언하는 두 가지 방식에는 함수형과 클래스형이 있다. 클래스형 이후에 함수형이 나왔지만, 클래스형을 쓰던 기업의 프로젝트 유지보수를 위해 개념을 알고 있어야 한다. 최근에는 함수형 + 클래스형의 장점을 넣은 리액트 훅을 사용하는 추세이다.
클래스형 컴포넌트는 로직을 컴포넌트 내에서 구현하기 때문에 더 복잡한 UI를 갖게 된다. 반면에, 함수형 컴포넌트는 props로 데이터를 받아서 UI에 뿌려주기 때문에 상대적으로 단순한 형태를 갖게 되며 재사용성이 높다는 장점이 있다.
=> 2019년부터 함수형 컴포넌트에 사용할 수 있는 리액트 훅을 지원하고 있다.