728x90
출처 : 생활코딩 react redux
0. 핵심
- redux 도입으로 인한 state 전달 용이
- 하지만 redux 코드와 기존 컴포넌트의 코드의 섞임으로 재사용성이 없어짐.(react-redux의 필요성)
들어가기전 : npm install redux 를 통해 redux 설치가 필요하다.
1. AddNumber.jsx
- dispatch를 통해 저장소의 reducer로 type과 state 변수를 보낸다.
import React, {Component} from 'react';
import store from '../store';
export default class AddNumber extends Component{
state = {size:1}
render(){
return(
<div>
<h1>Add Number</h1>
<input type="button" value="+" onClick={function(){
store.dispatch({type:'INCREMENT', size:this.state.size});
}.bind(this)}></input>
<input type="text" value={this.state.size} onChange={function(e){
this.setState({size: Number(e.target.value)});
}.bind(this)}></input>
</div>
)
}
}
2. store.js (src 폴더에 생성)
- 컴포넌트 state들의 저장소이다.
- function(state, action) 는 reducer라고 불린다
** reducer는 state 값은 변경사항은 그대로 유지하며 따로 넣어주는게 아닌, 자동으로 주입된다.
** action은 우리가 넣어주는 변수이다
** 보통 이전 state와 현재 action 변수를 조합해 state를 원하는 다음 값으로 만들어 반환한다.
- redux의 createStore 함수는 reducer를 넣어주면 저장소를 반환한다.
- reducer에서 AddNumber 컴포넌트에서 보낸 type과 state 변수를 action으로 받고 state를 반환한다.
import {createStore} from 'redux';
export default createStore(function(state, action){
// size와 type 등의 객체가 action으로 넘어온다.
// state는 반환값
if(state === undefined){
return {number:0}
}
if(action.type === 'INCREMENT'){
return {...state, number:state.number + action.size }
}
return state;
}, window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
)
3. DisplayNumber.jsx
- store.getState()로 값을 가져온다.
- store.subscribe를 통해 redux의 state가 바뀌면 자동으로 불러온다. 그후
setState 함수로 다시 rendering 한다.
import React, {Component} from 'react';
import store from "../store";
export default class DisplayNumber extends Component{
state = {number:store.getState().number}
constructor(props){
super(props);
store.subscribe(function(){
this.setState({number:store.getState().number});
}.bind(this))
}
render(){
return (
<div>
<h1>Display Number</h1>
<input type="text" value={this.state.number} readOnly></input>
</div>
)
}
}
728x90
'Front-End > React' 카테고리의 다른 글
[react-redux] 4. ract-redux 도입 (0) | 2021.02.17 |
---|---|
[react-redux] 3. redux 와 component 코드 분리 (0) | 2021.02.17 |
[react-redux] 1. 일반 어플리케이션 (0) | 2021.02.17 |
[React] 12. React로 사고하기(마지막) (0) | 2021.02.03 |
[React] 11. 합성 vs 상속 (0) | 2021.02.03 |
댓글