Redux Store 기본 세팅
거두절미하고, 우선은 기본적인 Redux store를 만들어주어야 한다.
src/store/index.js
import { createStore } from 'redux';
import rootReducer from './reducer';
const store = createStore(rootReducer);
export default store;
src/store/reducer/index.js
TetriminoModel: {
tetrimino_type: 0,
tetrimino_position: [0, 0],
tetrimino_color: "#000000"
},
NextModel: [], // just stores list of tetrimino_type
GameBoardModel: {
board_size: [0, 0],
board_status: [] // in form of: [[[x,y,color], [x,y,color]], [[x,y,color], [x,y,color]], ...]
}
function rootReducer(state = initialState, action) {
return state;
};
export default rootReducer;
우리가 이전 포스팅에서 만들었던 그 구조를 기억하며 store의 초기값을 설정해주었다. 아직 이름만 지어주고 value는 넣지 않았지만, 추후에 action을 사용하여 넣어주도록 할 것이다.
기본적인 Action 만들기
이제 우리의 reducer에 다양한 action 함수들을 생성해주도록 한다.
src/store/actions/action-types.js
export const UPDATE_TETRIMINO = "tetris/UPDATE_TETRIMINO";
export const UPDATE_GAMEBOARD = "tetris/UPDATE_GAMEBOARD";
export const UPDATE_NEXT = "tetris/UPDATE_NEXT";
src/store/actions/index.js
import { UPDATE_TETRIMINO, UPDATE_GAMEBOARD, UPDATE_NEXT } from "./action-types";
export function updateTetrimino(payload) {
return { type: UPDATE_TETRIMINO, payload }
};
export function updateGameboard(payload) {
return { type: UPDATE_GAMEBOARD, payload }
};
export function updateNext(payload) {
return { type: UPDATE_NEXT, payload }
};
각각의 action 함수는 단순하게 각 모델을 업데이트해주는 역할을 수행한다. 세부적인 action들은 추후에 필요하면 추가해주도록 하고 우선은 이렇게 두기로 한다.
이제 redux store를 action을 활용하도록 업데이트해야 한다. 위에 만들어둔 store에 rootReducer 부분만 수정하면 된다.
src/store/reducer/index.js
...
function rootReducer(state = initialState, action) {
if(action.type === UPDATE_TETRIMINO) {
state.tetriminoModel = action.payload;
}
if(action.type === UPDATE_GAMEBOARD) {
state.GameBoardModel = action.payload;
}
if(action.type === UPDATE_NEXT) {
state.NextModel = action.payload;
}
return state;
};
...
단순하게 payload로 들어온 오브젝트를 state에 업데이트해주도록만 설정해 두었다. 추후에 다양한 Action을 추가하여 보기 좋게 다듬어야 할 것이다.
간단한 모델링은 끝!
기본적인 모델은 완성해두었다. 이제 다음 포스팅에서는 이 모델을 화면에 표시할 View를 만들도록 할 것이다. 별다른 Image resource를 사용하지 않고 기본적인 HTML5+CSS3를 통하여 만들 것이기 때문에 HTML5와 CSS3에 흥미가 있는 독자들은 재밌게 읽을 수 있을 것이라고 생각한다.
Comments