191120 TIL 코쿼 강의 3 - contextAPI
Nov 20, 2019
»
1.5막,
TIL (Today I Learned),
코드스쿼드,
React.js
코쿼 강의 3 - contextAPI
-
리액트 기본 원리 :
state가 바뀌면 render를 한다.
그래서 직접적인 DOM 조작은 안하는 것이 좋음. (state가 꼬임 - uni-direction) 근데 꼭 해야된다면useRef
… -
MVC
이벤트 -> 상태변경 -> 화면의 변화
Controller = 입력장치 (마우스,, 등) / 진입점!!
모델과 뷰 관계를 느슨하게.const tm = new TodoModel("http:///"); const view = new View(tm); class View { constructor(todoModel) { this.todoMoel = todoModel; } reRender(newData) { // Dom 변화를 준다. } action() { // 무언가 하고 나서.. this.todoModel.subscribe(this.reRender); } }
생각: 지식이 실습의 수준보다 넘 높다,,
-
리액트가 리랜더링 되는 이유: 상태를 구독하고 있는 것 !!
-
npm run build
-
관심있는 애가 바뀌면 소비하는 애가 다 바뀜… !!
-
state 짜는 방법:
- useState로 먼저 짬
- 다른데다가 공유해야돼 -> props
- 근데 전혀 이상한데다 공유해야돼. -> 상태를 위로 올려서 prop으로 전달
- 아님 바로 던져주기 -> context API(필요할 때만)
생각: 내일 회사가면 구조부터 짜고 문서 정리해야겠따
상태가 바뀌면 렌더링이 다시 된다!! 만 기억하면 된다–!
생각: 내일은 코드 안짜고 설계만 할거야…
- useReducer 사실 useState로 구현할 수 있다.
- 관심사를 분리 / 모델 분리 (모델 테스트 가능, 모델 재사용)
- 컴포넌트가 뷰만 사용. 뷰에서는 행위만 표현 (순수해짐 -> 재사용 가능)
- dispatch 메소드는 어떠한 행위를 자기 객체에 담아서 날라줌
- dispatch{type, payload} : payload는 데이터
- useReducer의 장점 : dispatch로 함수 전달 가능!!
- 기존상태변경 === mutable / 새로운 객체/배열 생성 === immutable (기존은 보존.. )
- shallow equality checking === immutable === 껍데기만 비교 (두 객체가 들어왔네. 메모리 주소가 다르네? 렌더 다시행~)
-
deep equality checking === mutable === 속까지 까서 비교
- history API (브라우저 api임! js api 아님!) / pushState .. / react Router가 공식적으로 history에 의존!
생각: context 여러개면 어디에 놓는 게 좋지? 다 루트? or 사용하는 컴포넌트들 중 가장 상위?
생각: 내 블로그에 search 기능 있으면 좋겠다,,