※ 수정될 수 있음
<html>
<head></head>
<body>
<header>
...headerThings...
</header>
<main>
...mainThings...
</main>
<footer>
...footerThings...
</footer>
</body>
</html>
위의 코드는 일반적인 html 구조이다.
이런식으로 하나의 HTML파일에 header, main, footer부분까지 하나의 파일에 작성하게 된다.
<html>
<head></head>
<body>
<Header/>
<Main />
<Footer />
</body>
</html>
그러나 리액트는 컴포넌트 구조로 작성을 할 수 있기 때문에 각각의 부분을 분리해서 작업을 진행할 수 있다.
리액트로 작업할 경우, header부분만 프로그래밍하는 header컴포넌트, main부분만 작성하는 main컴포넌트, footer부분만 작성하는 footer컴포넌트를 만들어 작업할 수 있다.
(header, main, footer 파일 불러와 작성)
Class 컴포넌트
component를 react에서 가져옴(import). component를 extends 하는 클래스 만들고 render() 함수 통해서 return
import React, {Component} from 'react'; class 클래스명 extends Component { render() { return (<div>Hello</div>); } }; export default 클래스명;
Function 컴포넌트
return(괄호 안 태그)
function FunctionComponent() { return (<div>Hello</div>); }
const FunctionComponent = () => <div>Hello</div>;
우리가 주입한 리액트에서 불러온 Component 클래스에서 기본적으로 가지고 있는 메소드 이다.
저 메소드를 HTML코드 같아 보이는 문법을 리턴하는 형태로 작성하게 되면, 웹 브라우저에서 우리가 작성한 HTML코드를 확인할 수 있다.
Data handling in reactjs. props와 state는 리액트에서 다루는 데이터의 개념.
props : 받은 데이터 이거나 생성된 데이터, 즉 데이터의 기원이 자기 자신이 아닌 것
state : 자기자신의 컴포넌트에서 만들어낸 데이터
(컴포넌트 기준에 따라 state가 될 수 있고, props가 될 수 있다.)
state
현재 컴포넌트의 데이터, 컴포넌트 안에서 동적으로 생성/변경되는 데이터
state ={number: 0}; //state 초깃값 설정 render() { const { number } = this.state; //state 조회할 때는 this.state로 조회 }
state는 객체 형태로 생성되거나, null 타입이여야만 한다. 그럼 왜 state를 사용할까?
바로, state 업데이트에는 setState라는 메소드가 사용되는데(리액트 컴포넌트에서 제공하는 메소드), 만약 setState메소드를 사용하지 않고 state property에 접근해서 값을 변경하는 경우 그 값이 실제 HTML상으로는 업데이트 되지 않게 된다.
★ setState( { 업데이트할 state property: 값 } ) 과 같은 객체 형태로 업데이트 합니다.
★ 예시
this.setState({ helloMessage: 'Change' })
props
컴포넌트 간 state, 메소드 전달 가능. 다른 컴포넌트에서 현재 컴포넌트로 전달 받은 데이터.
실습 : 카운터


<결과> 