리액트 대 원칙 : immutable data
리액트를 쓰는 이유 : 데이터바인딩이 매우 쉽다. -> src, id, href에서 { 변수명, 함수 등 }
innerhtml 안써도 됨
jsx에서 style 속성을 집어넣을 때 : style={object 자료형으로 만든 스타일} (camelCase 작명 관습을 따름)
데이터는
state는
변수 대신 쓰는 데이터 저장공간
useState()를 이용해 만들어야 함 (두개의 데이터가 들어간 array가 남게 됨)
문자, 숫자, array, object 다 저장 가능
state에 데이터를 저장해놓는 이유: 웹이 app처럼 동작하게 만들고 싶어서. state는 변경되면 html이 자동으로 재렌더링 된다. -> 새로고침 없이도 html에 재렌더링 됨
수정된 [데이터]를 만든다.
근데 state를 deep copy해서 수정한다. (reference data type 특징임)
deep copy : 값 공유 X, 서로 독립적인 값을 갖는 복사
Component 만들어두면 관리가 편해진다
함수 만들고 이름 짓고
축약을 원하는 HTML 넣고
원하는 곳에서 <함수명 />
이름은 대괄호
return 안에 있는건 태그 하나로 묶어야함
반복출현하는 html 덩어리들
자주 변경되는 html UI 들
다른 페이지를 만들때도 컴포넌트로 만듦
state를 쓸 때 복잡해짐 (상위 component 에서 만든 state를 쓰려면 props 문법을 이용해야 함)
조건
반복
컴포넌트간 통신
UI만드는 법
UI와 관련된 중요 정보들을 state로 저장해놓고
state에 따라서 UI가 수정되게 만들면 된다.
input -> onChange
사용자가 input에 입력한 값을 state로 저장해보자
사용자가 입력한 값은? e.target.value
컴포넌트 분리
내보내기 : export {변수1, 변수2}
가져오기 : import {변수1, 변수2} from 경로
페이지 나누기 (라우팅)
스타일
useEffect 훅
컴포넌트의 Lifrcycle : 컴포넌트가 생성되기 전에 이것좀 해줘, 컴포넌트가 삭제되기 전에 이것좀 해줘
타이머 쓸 때 주의
타이머는 변수에 저장
타이머를 쓰면 꼭 해제 해준다 clearTimeout