html/css에서 js로 dom을 조작하고 event에 반응
웹의 발전에 따라 dom의 조작이 빈번해짐에 따라서 jquery가 등장
jquery는 번거로운 dom조작을 단순하고 쉽게 해준다 ->그러나 발전하는 웹에 한계에 도달하면서 Angular, Vue, React가 등장
프레임워크와 라이브러리는 기술을 분류한 네임
공통점
차이점
Angular
Vue
React
Why React?
React?
" React는 사용자 인터페이스를 구축하기 위한 선언적이고 효율적이며 유연한 Javascript 라이브러리 "
리액트 공식문서에서는
선언형, 컴포넌트 기반, 한 번 배워서 어디서나 사용하기로 소개하고 있다.
사용자 인터페이스 UI를 만들기 위한 Javascript 라이브러리
그렇다면 선언적이란?
선언적 vs 절차적
절차적은 how로 접근한다. 어떻게 하고, 그 다음 무얼하고 이런느낌.. 선언적은 what에 대한 접근이다. 다시 말해, 최종목표에 대한 상상을 무엇인가에 전달하면 완성!
내가 위스타그램을 만든 방법이 절차적이라고 한다.
나는 매일매일 머리털을 5626291개씩 뽑았다.
Virtual Dom
virtual dom은 리액트가 화면을 업데이트하는 과정을 효율적으로 하게 하는 기술
dom을 매번 조작해서 작업하는 것은 비효율적 -> virtual dom이라는 가상의dom을 만들어 유지 -> 화면의 변화가 필요할 때 vitual dom이 필요한 dom을 계산하고 실제 dom에 한번만 수정
자바스크립트 실행 환경 ex) Brower
node = 자바 스크립트 실행환경
brower 밖에서도 자바스크립트를 실행하게 할 수 있는 도구(자바스크립트의 탈웹)
프로젝트를 구성하기 위해 여러가지 패키지들을 사용하며 브라우저가 아닌 컴퓨터에 작업이 이루어져야 함. (자바의 탈웹!)
npm
node package manager
패키지 = 프로그램
프로젝트를 만들 때 필요한 패키지 (프로그램)을 관리하는 역할
CRA
crate react app
package.json
Index.html
html의 엔트리 포인트
퍼블릭 폴더 하위 존재
Index.js
자바스크립트의 엔트리 포인트, 중간다리-html과 리액트 컴포넌트를 연결해주는 파일
import - 가져온다의 뜻
import React from "react"; - 노드 모듈에 있는 react에서 react를 가져온다
reactDom.render(<App /),document.getElementById("root"));
reactDom. - .객체접근하는 것 reactDom은 객체
render - 메소드
() - 함수호출
- 꺽쇠는 컴포넌트 의미
document.getElementById("root") - id가 root인 요소를 html에서 가져온다
= 첫번째 인자의 컴포넌트를 두번째 인자에 렌더링해준다
app.js
실제 화면에 보여지는 컴포넌트
리액트 함수형 컴포넌트는 태그와 비슷하다 ex)
태그와 구분법은 첫 글자가 대문자인지 아닌지
export default의 문법으로 내보내주어야 한다 ex) export default App;
Component
정의 - 재사용 가능한 각각의 독립된 모듈
프론트엔드 분야에 한해서 재사용 가능한 ui구성 단위
장점
class형 컴포넌트
import React from "react"
class login extends React.Component{
render() {
return <h1>Login</h1>
}
}
class 형 컴포넌트는 초기에 많이 사용되던 형태
함수형에 비해 문법과 사용이 복잡
func형 컴포넌트는 클래스에 비해 간단하고 단순
초기에는 state를 관리하지 못한다는 단점으로 잘 사용되지 않ㅇㅁ
그러나 버전 업을 통해 state를 관리한다.
자바스크립트 확장 문법(JavaScript Syntax Extensin)
자바스크립트와 html을 합쳐놓은듯한 형태
마크업을 편리하게 작성하기 위한 문법
JSX로 작성한 코드는 자바스크립트가 인식할 수 없어 Babel이라는 패키지를 통해 변환해야한다
장점
특징
하나의 부모태그로 감싸주기 위해 빈꺽쇠<>(fragment?)로 묶어줄 수 있다.