본문 바로가기
풀스택/React

7-1 카운터 예제(react)

by woohyun22 2019. 4. 24.

react로만 이루어진 기본적인 카운터 예제



counter component - 계산된 값을 화면에 나타냄

option    -  계산할 값 입력받고 부모 컴포넌트로 전달

button    -  더할지 뺄지 선택할 버튼 나타냄


App            - 공통부모, counter에 표시되는 값과 계산될값을 state로 가지고 있어야함.또한 버튼이 클릭될때마다 발생한 이벤트를 전달받아 counter에 표시되는 값을 계산하여 state에 저장한다.


Counter.js

import React, { Component } from 'react';

class Counter extends Component {
render() {
return (
<div>
<h1>Value : {this.props.value}</h1>
</div>
);
}
}

export default Counter;


전달받은 value 출력


Option.js

import React, { Component } from 'react';

class Option extends Component {
constructor(props) {
super(props);
this.onChange = this.onChange.bind(this);
}

onChange(event) {//textbox에 값 입력시 부모컴포넌트로 전달해줌
this.props.onChange(event.target.value);
console.log(event.target.value);//찍어보면 바로바로 바뀌는걸 알수있음 바뀐 값이 부모에게 넘어감
}

render() {
return (
<div>
<input value={this.props.diff} onChange={this.onChange} />
</div>
);
}
}

export default Option;


diff값을 전달, onChange 이벤트 등록(diff는 더해지고 빼지는 값)


Button.js

import React, { Component } from 'react';

class Button extends Component {
constructor(props) {
super(props);

this.onIncrement = this.onIncrement.bind(this);
this.onDecrement = this.onDecrement.bind(this);
}

onIncrement(event) {
this.props.onIncrement();
}

onDecrement(event) {
this.props.onDecrement();
}

render() {
return (
<div>
<button onClick={this.onIncrement}>+</button>
<button onClick={this.onDecrement}>-</button>
</div>
);
}
}

export default Button;


App.js

import React, { Component } from 'react';
import './App.css';

import Counter from './components/Counter';
import Option from './components/Option';
import Button from './components/Button';

class App extends Component {
constructor(props) {
super(props);

this.state = {
value: 0,
diff: 1
};
this.onChange = this.onChange.bind(this);
this.onIncrement = this.onIncrement.bind(this);
this.onDecrement = this.onDecrement.bind(this);
}

onChange(diff) {//사용자 입력값 state.diff에 저장
this.setState({
diff: diff
});
}

onIncrement() {//state.diff와 이전의 state를 합친 값을 state.value에 저장
this.setState(prevState => ({
value: prevState.value + Number(this.state.diff)
}));
}

onDecrement() {
this.setState(prevState => ({
value: prevState.value - Number(this.state.diff)
}));
}

render() {
return (
<div>
<Counter value={this.state.value} />
<Option diff={this.state.diff} onChange={this.onChange} />
<Button onIncrement={this.onIncrement} onDecrement={this.onDecrement} />
</div>
);
}
}

export default App;


Counter - state.value를 넘겨줘야한다.

밑의 옵션과 버튼도 해당값을 넘겨주고, 이벤트 핸들러 등록해야됨.


--------------

constructor 보충

728x90

'풀스택 > React' 카테고리의 다른 글

리액트 오류 하나씩 추가하기  (0) 2019.05.03
7-2 카운터 예제(redux)  (0) 2019.04.24
6. input  (0) 2019.04.23
5-2. props, state  (0) 2019.04.21
5-1. JSX 기본 정리  (0) 2019.04.19

댓글