React로 nodebirdSNS 만들기 (인프런)/#3 리덕스 익히기
#3-4 불변성과 리듀서 여러개 합치기
정중식
2020. 1. 8. 13:01
- ...state를 쓴 이유는 불변성 때문이다.
- state는 어떠한 이유에서든 절대 변해서는 안된다. 리액트에선 setState를 사용했음
- front폴더->reducers폴더->index.js
- user.js, post.js파일에있는 reducers들을 하나로 합친것 (중앙통제시스템)
import { combineReducers } from "redux";
import user from "./user";
import post from "./post";
const rootReducer = combineReducers({
user,
post
});
export default rootReducer;
- user.js
// store (state)
export const initialState = {
isLoggedIn: false,
user: {}
};
const LOG_IN = "LOG_IN"; // 액션의 이름
const LOG_OUT = "LOG_OUT";
// 실제 액션과 데이터
const loginAction = {
type: LOG_IN,
data: {
nickname: "정중식"
}
};
const logoutAction = {
type: LOG_OUT
};
const reducer = (state = initialState, action) => {
switch (action.type) {
case LOG_IN: {
return {
...state,
isLoggedIn: true,
user: action.data
};
}
case LOG_OUT: {
return {
...state,
isLoggedIn: false,
user: null
};
}
}
};
export default reducer;
- post.js
export const initialState = {
mainPosts: []
};
const ADD_POST = "ADD_POST";
const ADD_DUMMY = "ADD_DUMMY";
const addPost = {
type: ADD_POST
};
const addDummy = {
type: ADD_DUMMY,
data: {
content: "Hello",
UserId: 1,
User: {
nickname: "정중식"
}
}
};
const reducer = (state = initialState, action) => {
switch (action.type) {
case ADD_POST: {
return {
...state
};
}
case ADD_DUMMY: {
return {
...state,
mainPosts: [action.data, ...state.mainPosts]
};
}
}
};
export default reducer;