gitHub: https://github.com/leeyulgok/React-BootCamp-Team2/tree/main/src
- 사용자가 컴포넌트를 요청.
- 컴포넌트에서 액션 함수를 호출하여 액션 객체를 생성.
- 액션 객체는 dispatch 메서드를 통해 스토어로 전달.
- 스토어는 전달받은 액션 객체를 리듀서로 전달.
- 리듀서는 현재 상태와 전달받은 액션을 기반으로 새로운 상태를 반환.
- 스토어는 리듀서가 반환한 새로운 상태로 상태를 업데이트.
- 업데이트된 상태는 스토어를 구독하고 있는 컴포넌트에 자동으로 전달되어 UI를 업데이트.
출처: https://chanyeong.com/blog/post/21
src
...
- redux
-- reducers
--- movieSlice.js
--- rootReducer.js
-- store.js
import { createSlice } from '@reduxjs/toolkit';
const initialState = {
loading: false,
movies: [],
movie: null,
error: null,
};
const movieSlice = createSlice({
name: 'movies',
initialState,
reducers: {
fetchMoviesRequest: (state) => {
state.loading = true;
},
fetchMoviesSuccess: (state, action) => {
state.loading = false;
state.movies = action.payload;
},
fetchMoviesFailure: (state, action) => {
state.loading = false;
state.error = action.payload;
},
fetchMovieDetailRequest: (state) => {
state.loading = true;
},
fetchMovieDetailSuccess: (state, action) => {
state.loading = false;
state.movie = action.payload;
},
fetchMovieDetailFailure: (state, action) => {
state.loading = false;
state.error = action.payload;
},
},
});
export const {
fetchMoviesRequest,
fetchMoviesSuccess,
fetchMoviesFailure,
fetchMovieDetailRequest,
fetchMovieDetailSuccess,
fetchMovieDetailFailure,
} = movieSlice.actions;
export const fetchMovies = (url) => {
return async (dispatch) => {
dispatch(fetchMoviesRequest());
try {
const response = await fetch(url);
const json = await response.json();
dispatch(fetchMoviesSuccess(json.data.movies));
} catch (error) {
dispatch(fetchMoviesFailure(error.message));
}
};
};
export const fetchMovieDetail = (url) => {
return async (dispatch) => {
dispatch(fetchMovieDetailRequest());
try {
const response = await fetch(url);
const json = await response.json();
dispatch(fetchMovieDetailSuccess(json.data.movie));
} catch (error) {
dispatch(fetchMovieDetailFailure(error.message));
}
};
};
export default movieSlice.reducer;
본 후기는 유데미-스나이퍼팩토리 10주 완성 프로젝트캠프 학습 일지 후기로 작성 되었습니다.
#프로젝트캠프 #프로젝트캠프후기 #유데미 #스나이퍼팩토리 #웅진씽크빅 #인사이드아웃 #IT개발캠프 #개발자부트캠프 #리액트 #react #부트캠프 #리액트캠프