제로초 리액트 웹게임 강의 듣기 시작했다.
강의 중에 나오는 개념들을 정리했다.
쪼개진 javascript 파일들을 하나로 합쳐주는 기능을 한다.
쪼개진 javascript 파일이 모듈이다.
쪼개진 react 파일들은 webpack으로 하나로 합친 후
html에서 script 태그안에서 불러온다.
cdn으로 html안에 react.js
삽입 가능하다.
react-dom.js
는 react를 web에다가 렌더링해주는 역할. 역시 삽입 가능.
React.createElement(
type, [props],
[...children]
)
type에는 HTML tag, React component, React fragment가 들어갈 수 있다.
JSX
는 React.createElement
를 대체하기 위해 만들어졌다.
JSX
를 호출하는 코드를 Babel
(javascript 컴파일러)이 만나면
React.createElement()
를 실행한다.
<script src >
로 Babel
도 마찬가지로 불러올 수 있음.
불러온 후, 컴파일 할 <script>
의 내용에 대해서
<script>
의 type속성
값으로 "text/babel"
를 주면 해석된다.
뭘 해석하냐? JSX등 실험적인 javascript 문법을 해석한다.
class Something extends React.Component {
onSubmit = (e) => {
e.preventDefault();
this.selectElement.focus();
}
selectElement;
<input ref={(c) => this.selectElement = c;} />
}
ref의 사용은 위 코드에서 확인할 수 있다.
const inputRef = React.useRef(null);
<input ref={inputRef} />
hooks에서는 ref를 위 처럼 사용한다.
this.setState((prevState) => {
return {
state: 'newState'
}
})
이전 state 값을 사용해서 state 값을 업데이트 하는 경우
위처럼 함수를 인자로 넣어주어야 한다.
setState가 비동기이기 때문이다.
왜 비동기냐?
state 업데이트 될때마다 렌더를 다시하므로
최적화를 위해 state 업데이트를 한꺼번에 모아서 처리한다.
hooks는 state가 바뀔 때마다 hooks 함수 전체가 다시 실행된다.
그 결과 안에서 선언한 method들이 전부 새로 만들어진다.
최적화 필수!
HTML에서 tag의 속성인 for과 class는
React에서는 htmlFor과 className으로 대체한다.
(이름이 겹치기 때문에)