ch07-component
생성하고 구동ch07-component
선택하고 src
폴더에 새 파일 MyComponent.js
생성import React, {Component} from "react";
import PropTypes from 'prop-types';
// 클래스형 컴포넌트
class MyComponent extends Component {
// 객체를 여러 번 생성해도 공유하기 위해 static으로 선언
static defaultProps = {
name:'기본 이름'
};
static propTypes = {
name:PropTypes.string
};
render() {
// 구조 분해 할당
const {name, children} = this.props;
return (
<div>
안녕하세요, 제 이름은 {name}입니다.<br/>
children 값은 {children}입니다.
</div>
);
}
}
export default MyComponent;
App.js
를 다음처럼 수정import React from "react";
import MyComponent from "./MyComponent";
function App() {
return (
<MyComponent name="React">리액트</MyComponent>
);
}
export default App;
ch08-state
생성하고 구동ch08-state
선택하고 src
폴더에 새 파일 Counter.js
생성import React, {Component} from "react";
// 클래스형 컴포넌트
class Counter extends Component {
// 컴포넌트 내부에서 읽고 또 업데이트할 수 있는 값을 사용하려면 state를 사용
// 기본값을 미리 설정해야 사용 가능하며, this.setState() 메서드로만 업데이트 수행
state = {
number:0,
countNumber:0,
fixedNumber:10
};
render() {
// state를 조회할 때는 this.state로 조회
const {number, countNumber, fixedNumber} = this.state;
// 이벤트 연결시 태그의 이벤트 속성을 이용하며, 중괄호 안에서 함수 형태(=이벤트 핸들러)로 이벤트를 명시
return (
<div>
<h1>{number}, {countNumber}</h1>
<h4>바뀌지 않는 값: {fixedNumber}</h4>
<button
onClick={() => {
this.setState({number:number+1,countNumber:countNumber+2});
}}
>숫자 증가시키기</button>
</div>
);
}
}
export default Counter;
App.js
를 다음처럼 수정import React from "react";
import Counter from "./Counter";
function App() {
return <Counter/>;
}
export default App;
ch09-state
생성하고 구동ch09-state
선택하고 src
폴더에 새 파일 Say.js
생성import React, { useState } from "react";
const Say = () => {
// 배열 구조 분해 할당
// 예) const array = [1,2];
// const [one, two] = array;
// useState 함수 인자에는 상태의 초기 값을 전달
const [message, setMessage] = useState('');
// 이벤트 핸들러; 화살표 함수에서 한 줄일 때는 {} 생략 가능
const onClickEnter = () => setMessage('안녕하세요!');
const onClickLeave = () => setMessage('안녕히 가세요!');
const [color, setColor] = useState('black');
return(
<div>
<button onClick={onClickEnter}>입장</button>
<button onClick={onClickLeave}>퇴장</button>
{/* JSX 주석은 중괄호로 감싸야 주석으로 인식됨 */}
{/* color:color와 동일; 변수명 color가 속성명으로, 변수값이 속성값으로 인식됨 */}
<h1 style=>{message}</h1>
<button style= onClick={() => setColor('pink')}>
분홍색
</button>
<button style= onClick={() => setColor('aqua')}>
하늘색
</button>
<button style= onClick={() => setColor('gold')}>
금색
</button>
</div>
);
}
export default Say;
App.js
를 다음처럼 수정import Say from "./Say";
function App() {
return (
<Say />
);
}
export default App;