-
[리액트를 다루는 기술] 3장. 컴포넌트맨땅에코딩/react 2020. 9. 14. 20:49
템플릿 이상의 컴포넌트의 기능!
- 데이터에 맞춰 UI를 생성합니다.
- 라이프사이클 API를 이용하여 컴포넌트가 화면에 나타날 때,사라질 때, 변화가 일어날 때 주어진 작업들을 처리할 수 있습니다.
- 임의 메서드를 생성하여 특별한 기능을 덧붙일 수 있습니다.
클래스형 컴포넌트
: 함수형 컴포넌트와 달리 state 및 라이프사이클 기능을 사용할 수 있고 임의 메서드를 정의 할 수 있습니다.
[ 알아둘것!) 리액트 v16.8 업데이트 이후 Hooks 의 도입으로 state와 라이프사이클 API를 다른 방식으로 사용할 수 있게되었습니다. ]
예시)
//rcc import React, { Component } from 'react'; class temp extends Component { render() { return ( <div> </div> ); } } export default temp;
[ 알아둘것!) extension : Reactjs code snippets 설치하면 예약어를 통해 쉽게 클래스형 컴포넌트와 함수형 컴포넌트를 생성할 수 있습니다.]
-
클래스형 컴포넌트 : rcc
-
함수형 컴포넌트 : rsc
차이점?
- 함수형 컴포넌트와 다륵 state와 라이프사이클 기능을 사용할 수 있습니다.
- 임의 메서드를 정의할 수 있습니다.
함수형 컴포넌트의 장점?
- 선언하기 편하며, 메모리 자원을 덜 사용합니다.
- v16.8 업데이트 이후 "Hooks" 기능 도입으로 state와 라이플사이클 API 기능 사용이 가능해졌습니다.
import React from 'react'; import Temp from './Temp'; const App = () =>{ return <Temp /> }; export default App;
export default <컴포넌트명> : 다른 파일에서 import 가능하도록 모듈을 내보내줍니다.
import <컴포넌트명 : 변경가능> from <컴포넌트경로> : export한 컴포넌트 모듈을 불러옵니다.
props
: 컴포넌트 속성을 설정할 때 사용하는 요소입니다. 해당 컴포넌트를 불러와 사용하는 부모 컴포넌트에서 설정할 수 있습니다.
(예시에서는 App 컴포넌트 = 부모컴포넌트)
App.js /**********************************************************************/ import React from 'react'; import Temp from './Temp'; /////1) const App = () =>{ return <Temp name="gildong">children</Temp> //부모컴포넌트에서 props 값 지정 }; export default App; Temp.js /**********************************************************************/ import React from 'react'; import ProTypes from 'prop-types'; // 5) 컴포넌트 필수 pros 혹은 props의 타입 지정 /// 2) 비구조화 할당 전 const Temp = props => { return <div>Hi, My name is {props.name} children : {props.children} //children : 태그사이의 값 </div>; }; ///// 3) 비구조화 할당 후 const Temp = ({name,children}) => { return <div>Hi, My name is {name} children : {children} //children : 태그사이의 값 </div>; }; //// 4) Temp.defaultProps = { //부모컴포넌트에서 name이 넘어오지 않았을때 기본값 name : 'chulsu'; }; //// 5) Temp.propTypes = { name : ProTypes.string // name 타입 String old : ProTypes.number.isRequired // old 필수값, 타입 number }; export default Temp;
state
: 컴포넌트 내부에서 바뀔 수 있는 값을 의미합니다. props는 부모 컴포넌트가 설정하여 자식 컴포넌트는 읽기 전용으로만 사용할 수 있었습니다. state를 이용하여 컴포넌트 내부에서 값을 변경할 수 있습니다.
클래스형 컴포넌트의 state
import React, { Component } from "react"; class Counter extends Component { /// 1)constructor 사용 constructor(props){ super(props); this.state = { number : 0 } } /// 2) state = { number: 0, }; render() { const {number} = this.state; return ( <div> <h1>{number}</h1> <button onClick={() => { /// 3) this.setState( (prevState) => { return { number: prevState.number + 1 }; }, /// 4) () => { console.log("callBack"); } ); }} > +1 </button> </div> ); } } export default Counter;
1) constructor를 사용하여 state 초기값 지정
2) constructor 선언하지 않고 state 초기값 지정
3) 객체 대신 함수 인자를 전달
4) setState 콜백함수 등록
함수형 컴포넌트의 useState 사용
: v16.8 이후부터 함수형 컴포넌트에서 state를 사용할 수 있게 되었습니다.
import React, { useState } from "react"; /// 1) const Say = () => { /// 2) const [message, setMessage] = useState(""); /// 3) const onClickEnter = () => setMessage("안녕하슈"); const onClickLeave = () => setMessage("안녕가슈"); /// 5) const [color, setColor] = useState("yellow"); return ( <div> /// 4) <button onClick={onClickEnter}>입장</button> <button onClick={onClickLeave}>퇴장</button> <h1 style={{ color }}>{message}</h1> <button style={{ color: "red" }} onClick={() => setColor("red")}> 빨간색 </button> <button style={{ color: "green" }} onClick={() => setColor("green")} > 초록색 </button> <button style={{ color: "blue" }} onClick={() => setColor("blue")}> 파란색 </button> </div> ); }; export default Say;
1) useState를 사용하기 위해 import 해줍니다.
2) useState()로 초기값을 설정합니다.
3) 첫번째요소: 현재상태 , 두번째요소: 상태를 바꾸어주는 함수
4) 이벤트 연결
5) 또 다른 상태 관리
[알아둘것!? : state의 값을 변경할 때는 setState 혹은 useState를 통해 전달받은 세터함수를사용해야 합니다.]
1) 배열혹은 객체의 사본생성
2) 사본에 값 업데이트
3) 그 사본의 상태를 setState / 세터함수를 통해 업데이트 합니다.
'맨땅에코딩 > react' 카테고리의 다른 글
[리액트를 다루는 기술] 2장 JSX (0) 2020.09.11 [리액트입문] 프로젝트 생성 (0) 2020.08.21 [리액트를 다루는 기술] 1장 리액트 시작 (0) 2020.08.20