/* 첫번째 item에 styling할 때 */
.item:first-child{
color: #FFFFFF;
}
/* 두번째 item에 styling할 때 */
.item:nth-child(2){
color: #0066FF;
}
/* 마지막 item에 styling할 때 */
.item:last-child{
color: #000000;
}
nth-child의 child라는 말 때문에, item 클래스의 자식요소에 styling하라는 뜻인가? 싶을 수 있지만, 여기서 child의 의미는 item 부모 요소의 child를 의미한다.
부모 요소의 child~ 이런 식으로 기억하는 것이 더 헷갈릴 수 있으므로, nth-child가 나오면 선택자와 같은 level에 있는 것 중 몇 번째인지를 확인해보는 게 가장 좋다.
React component에서 다루는 data는props와 state, 이 두 가지로 나뉩니다.
props는 부모 component가 자식 component에게 주는 값입니다. 자식 component에서는 props를 받아오기만 하고, 받아온 props를 직접 수정할 수 없습니다.
반면에state는 component 내부에서 선언하며, 내부에서 값을 변경할 수 있습니다.
+) props("properties"의 줄임말)와 state는 일반 JavaScript 객체입니다. 두 객체 모두 렌더링 결과물에 영향을 주는 정보를 갖고 있는데, 한 가지 중요한 방식에 차이가 있는 것입니다.props는함수 매개변수처럼component에 전달이 되는 반면,state는함수 내에 선언된 변수처럼component 안에서 관리됩니다.
새 Component 만들기
먼저, src 디렉토리에 MyName이라는 component를 만들어보겠습니다.
import React, { Component } from 'react';
class MyName extends Component {
render() {
return (
<div>
안녕하세요! 제 이름은 <b>{this.props.name}</b> 입니다.
</div>
);
}
}
export default MyName;
자신이 받아온 props 값은this.키워드를 통해 조회할 수 있습니다. 지금은 name이라는 props를 보여주도록 설정해두었습니다.
이제 component를 사용해보겠습니다.
import React, { Component } from 'react';
import MyName from './MyName';
class App extends Component {
render() {
return (
<MyName name="리액트" />
);
}
}
export default App;
import를 통해 component를 불러오고, 렌더링 해보겠습니다. 이렇게 component를 만들고 나면, 일반 태그를 작성하듯이 작성해주면 됩니다.props값은name="리액트"처럼 태그의 속성 설정하듯이 작성해주시면 됩니다.
함수형 Component
위와 같이 단순히 props만 받아와서 보여주는 component의 경우에는 더 간편한 문법으로 작성할 수 있습니다. 바로 함수 형태로 작성하는 것인데요. 위에서 만들었던 MyName component를 다시 작성해보겠습니다.
import React from 'react';
const MyName = ({ name }) => {
return (
<div>
안녕하세요! 제 이름은 {name} 입니다.
</div>
);
};
export default MyName;
훨씬 간단하게 작성이 가능한 것을 알 수 있는데요!함수형 component와 클래스형 component의 주요 차이점은state와 LifeCycle이 빠져있다는 점입니다. 그래서 component 초기 마운트가 아주 미세하게 빠르고, 메모리 자원을 덜 사용합니다. 미세한 차이라서 component를 무수히 많이 렌더링 하는 것이 아니라면 성능적으로 큰 차이는 없습니다.
state
state는 동적인 data를 다룰 때 사용합니다. 이번에는 Counter라는 새로운 component를 만들어보겠습니다.
이렇게 하면 나중에 버튼에서 클릭 이벤트가 발생했을 때, this가 undefined로 나타나서 제대로 처리되지 않게 됩니다. 함수가 버튼의 클릭 이벤트로 전달되는 과정에서'this'와의 연결이 끊겨버리기 때문인데요. 이를 고쳐주려면 constructor에서 아래처럼 해주면 됩니다.