정말 많이 쓰이는 API입니다. 컴포넌트가 DOM 위에 생성되는 상태에 따라 실행되는 메소드들입니다.
구성 요소에는 수명주기가 있습니다. 구성 요소는 인스턴스화, 마운트, 렌더링 및 업데이트, 마운트 해제 및 소멸됩니다.라이프 사이클은 단순하고 일관된 추상화 계층을 제공하여 브라우저 API의 복잡성을 관리하는 데 도움이됩니다.라이프 사이클을 사용하면 렌더링을보다 세밀하게 제어하기 위해 각 단계에서 사용자 지정 코드를 선택적으로 실행할 수도 있습니다.
구성 요소 수명주기의 각 단계를 살펴 보겠습니다.
Mounting Cycle
constructor(object props)
컴포넌트 클래스가 인스턴스화됩니다.생성자에 대한 매개 변수는 부모 요소에 의해 지정된대로요소의 initial입니다.
선택적으로 객체를에 할당하여 요소의 초기 상태를 지정할 수 있습니다.
현재이 요소에 대해 기본 UI가 렌더링되지 않았습니다. propsthis.state
componentWillMount()
이 메소드는 렌더링이 처음으로 발생하기 전에 한 번만 호출됩니다.현재이 요소에 대해 렌더링 된 기본 UI는 없습니다.
render() -> React Element
render 메소드는 렌더링하기 위해 React Element를 반환해야합니다 (또는 아무것도 렌더링하지 않으려면 null).
componentDidMount()
이 메소드는 렌더링이 처음 발생한 후 한 번만 호출됩니다.이제이 요소의 기본 UI가 렌더링을 마치고직접 조작하기 위해액세스 할 수 있습니다.를 사용하여 비동기 API 호출을하거나 지연된 코드를 실행해야하는 경우 일반적으로이 방법으로 수행해야합니다.this.refssetTimeout
Updating Cycle
componentWillReceiveProps(object nextProps)
이 구성 요소의 부모가 새로운 세트를 전달했습니다.이 구성 요소는 다시 렌더링됩니다.
메소드가 호출되기 전에선택적으로이 컴포넌트의 내부 상태를 업데이트하기 위해호출할수 있습니다.propsthis.setState()render
및의 다음 값을 기반으로구성 요소는 다시 렌더링하거나 다시 렌더링하지 않을 수 있습니다.이 메소드의 기본 클래스 구현은 항상 리턴합니다(구성 요소를다시 렌더링해야 함).최적화의 경우,이 메소드를 오버라이드 (override) 중 여부를 확인또는수정 된, 예를 들어, 이러한 객체에있는 각각의 키 / 값의 평등 테스트를 실행합니다.리턴하면메소드가 호출되지 않습니다.props state true props state false render
import React from 'react';
import ReactDOM from 'react-dom';
import Moment from 'react-moment';
import App from './components/app';
// Start the pooled timer which runs every 60 seconds
// (60000 milliseconds) by default.
Moment.startPooledTimer();
// Or set the update interval. This will update the mounted
// instances every 30 seconds.
// Moment.startPooledTimer(30000);
ReactDOM.render(<App />, document.getElementById('mount'));
ES6는 템플릿 리터럴(Template literal)이라고 불리는 새로운 문자열 표기법을 도입하였다. 템플릿 리터럴은 일반 문자열과 비슷해 보이지만, ‘ 또는 “ 같은 통상적인 따옴표 문자 대신 백틱(backtick) 문자`를 사용한다.
const test = `템플릿 리터럴`;
일반적인 문자열에서 줄바꿈은 허용되지 않으며 공백(white-space)를 표현하기 위해서는 백슬래시(\)로 시작하는이스케이프 시퀀스(Escape Sequence)를 사용하여야 한다. ES6 템플릿 리터럴은 일반적인 문자열과 달리 여러 줄에 걸쳐 문자열을 작성할 수 있으며 템플릿 리터럴 내의 모든 white-space는 있는 그대로 적용된다.
const test = `<div> hihi </div>`;
템플릿 리터럴은 + 연산자를 사용하지 않아도 간단한 방법으로 새로운 문자열을 삽입할 수 있는 기능을 제공한다. 이를 문자열 인터폴레이션(String Interpolation)이라 한다.
const firstName = 'Hong';
const LastName = 'gildong';
//ES 5
console.log('My nmae is ' + first + ' ' + second);
//ES 6
console.log(`My name is ${firstName} ${LastName}`);
문자열 인터폴레이션은${ … }으로 표현식을 감싼다. 문자열 인터폴레이션 내의 표현식은 문자열로 강제 타입 변환된다.
최신 웹 앱을 스타일링하는 적절한 방법에 대해 많은 이야기가있었습니다.문서 레벨에서 일반적이고 가장 오래된 스타일링 방법이 있습니다-style.css파일을생성하고 HTML 파일에서 링크하는 것이 더 최근에는 JS의 스타일링 방법입니다.이것은 CSS-in-JS로 널리 알려져 있습니다.
CSS-in-JS는 CSS 모델을 문서 수준이 아닌 구성 요소 수준으로 추상화하는 스타일링 방식입니다.이것은 CSS가 특정 구성 요소로만 범위가 지정 될 수 있고 문서 수준이 아니라는 개념입니다.CSS-in-JS를 사용하면 다음과 같은 이점이 있습니다.
HTTP 요청 수 감소 :CSS-in-JS는 자산과 리소스를로드하기 위해 HTTP 요청을하지 않아도됨을 의미합니다.
스타일링 조각화 :CSS-in-JS를 사용하면 호환성 문제에 대한 걱정없이 자유롭게 스타일을 작성할 수 있습니다.
CSS-in-JS 접근법의 예는styled-components입니다.스타일 구성 요소를 사용하면 클래스 이름 충돌에 대한 걱정없이 구성 요소에 일반 CSS를 작성할 수 있습니다.단일 구성 요소로 범위가 지정되고 페이지의 다른 요소로 누출되지 않는 CSS를 작성하는 데 도움이됩니다.
스타일이 지정된 구성 요소 인 이유
스타일이 지정된 구성 요소를 사용하면 태그가 지정된 템플릿 리터럴을 사용하여 JavaScript로 CSS를 작성할 수 있습니다.구성 요소와 스타일 간의 매핑을 제거합니다. 구성 요소는 하위 수준 스타일 구성으로 만들어집니다.다음과 같은 이유로 스타일 구성 요소가 작성되었습니다.
자동 중요 CSS: 스타일이 지정된 구성 요소는 페이지에 렌더링되는 구성 요소를 추적하고 해당 스타일을 완전히 자동으로 주입합니다.코드 분할과 결합하면 사용자는 필요한 최소량의 코드를로드 할 수 있습니다.
클래스 이름 버그 없음: 스타일이 지정된 구성 요소는 스타일에 대한 고유 한 클래스 이름을 생성합니다.중복, 겹침 또는 철자 오류에 대해 걱정할 필요가 없습니다.
CSS를 쉽게 삭제: 클래스 이름이 코드베이스 어딘가에 사용되는지 알기가 어려울 수 있습니다.스타일링 된 구성 요소는 모든 스타일링이 특정 구성 요소에 연결되어 있으므로 분명합니다.컴포넌트가 사용되지 않고 (툴링이 감지 할 수있는) 삭제되면 모든 스타일이 컴포넌트와 함께 삭제됩니다.
간단한 다이나믹 스타일링: 소품 또는 글로벌 테마를 기반으로 컴포넌트의 스타일을 조정하는 것은 수십 개의 클래스를 수동으로 관리 할 필요없이 간단하고 직관적입니다.
무통 유지 관리: 구성 요소에 영향을 미치는 스타일을 찾기 위해 다른 파일을 찾아 다닐 필요가 없으므로 코드베이스의 크기에 상관없이 유지 관리가 매우 중요합니다.
자동 공급 업체 접두사: CSS를 현재 표준에 작성하고 Styled Components가 나머지를 처리하도록합니다.