시작하세요! 리액트 프로그래밍
1
JSX를 제외한 부분의 설명은 ‘아주’ 훌륭하지만, JSX 부분에 가면 뭔가 아쉬움이 느껴진다.
2
책은 나름대로 자세하게 소개하고 있지만 현재 우리가 사용하고 있는 React 환경과는 ‘매우’ 다르다. 따라서 예제를 잘 돌려보는게 생각만큼 쉽지 않다. 반면에 예제가 매우 구조적으로 잘 되어 있는 것 같지만, 잘 작동하지 않기 때문에 아쉬움이 있다. React를 어느 정도 해 봤던 사용자의 경우 예제를 참고해서 새롭게 작성해보는 방법을 권한다
3
FLUX 구현체를 Redux를 사용하고 있지 않다는 점은 큰 아픔이 아닌가 싶다.
-
h1()에 대한 첫 번째 매개변수(이 경우 null)는 컴포넌트로 전달하려는 프로퍼티(DOM 속성에 해당)를 지정하는 객체다. […] 두 번째 매개변수(이 경우 “Hello World”)는 컴포넌트의 자식을 정의한다. […] (DOM 용어로는 텍스트 노드)
-
또한 CSS 프로퍼티를 다룰 때는 자바스크립트 API 이름을 사용해야 한다. 즉, font-family 가 아닌 fontFamily를 사용해야 한다.
-
여기서 볼 수 있듯이 필수 요건은 render() 메서드를 구현하는 것이다.
-
모든 프로퍼티는 다음 예제와 같이 this.props 객체를 통해 이용할 수 있다. [..] this.props는 읽기 전용이라 생각하자. 프로퍼티는 부모 컴포넌트에서 자식으로 구성을 전달하는 데 유용하다. [..] this.props의 프로퍼티를 설정하고 싶을 때는 컴포넌트의 사양 객체에 있는 추가 변수나 프로퍼티를 이용하는 것이 좋다. 예를 들어, this. props.thing이 아닌 this.thing을 이용하는 것이 좋다.
-
propTypes; 컴포넌트가 받을 프로퍼티를 사전에 선언할 수 있다. 따라서 컴포넌트를 사용할 다른 개발자가 컴포넌트를 구성하는 데 사용할 수 있는 프로퍼티를 알아보기 위해 render() 함수의 소스코드를 직접 살펴볼 필요가 없다. […] getDefaultProps() 메서드를 구현하면 이러한 유형의 코드를 작성할 필요 없이 중요한 일에 집중할 수 있다. […] 여기서 볼 수 있듯이 getDefaultProps()는 각 선택적 프로퍼티(.isRequired가 없는 프로퍼티)에 유요한 값을 제공하는 객체를 반환
-
setState()를 호출한 이후 UI 업데이트는 변경 사항을 효율적으로 처리하는 대기열 메커니즘을 통해 처리되며, this.state를 직접 업데이트하면 예기치 않은 결과를 발생할 수 있다. this.props와 마찬가지로 this.state 객체 역시 읽기 전용으로 취급하는 것이 좋다. […] this.props를 통해 프로퍼티에 접근할 수 있는 것과 비슷하게 this.state 객체를 통해 상태에 접근할 수 있다. 상태를 업데이트하려면 this.setState()를 사용한다. this.setState()가 호출되면 리액트는 여러분의 render() 메서드를 호출하고 UI를 업데이트 한다.
-
다음 단게는 이 상태 비저장 컴포넌트를 상태 저장 컴포넌트로 바꾸는 것이다. 다른 말로 하면, 컴포넌트가 자체 데이터(상태)를 유지 관리하게 해서 나중에 데이터가 변경되고 자신(렌더링)을 업데이트할 때 이 데이터를 이용해 렌더링하게 해보자.
-
상태를 업데이트 할 때는 항상 this.setState()를 사용한다.
-
리액트는 브라우저 이벤트를 래핑하고 정규화하는 합성 이벤트(synthetic event)를 사용하므로 브라우저 불일치 문제가 자연스럽게 해결된다. […] 리액트 이벤트 핸들러에 캐멀 표기법(camel case)을 이용하므로 onclick이 아닌 onClick을 이용해야 한다.
-
프로퍼티는 바깥 환경(컴포넌트의 사용자)에서 컴포넌트를 구성하기 위한 메커니즘이다. 상태는 컴포넌트의 내부 데이터다. 객체지향 프로그래밍과 비교하면 this.props는 클래스 생성자로 전달되며 인수와 비슷하며 this.state는 전용 프로퍼티와 비슷하다.
-
외부 프로퍼티 변경을 매끄럽게 처리하려면 프로퍼티 변경에 대비하는 componentWillReceiveProps() 메서드를 구현하면 된다.
-
component{Will, Did}Update(), component{Will, Did}Mount(), component{Will}Unmount(), shouldComponentUpdate(newProps, newState)
-
트랜스파일은 의미는 동일하지만 이전 브라우저가 이해할 수 있는 구문으로 소스코드를 변환하는 과정이다. 폴리필(기능 지원)을 이용하는 것과는 다르다.
-
그런데 이렇게 하면 컴포넌트가 “순서성”을 잃는다. 순수 렌더 컴포넌트는 props와 state만 이용해 렌더링한다는 것을 기억하자.