export function 함수명(변수이름) => {
return {
type: 액션타입변수이름,
변수이름: 변수이름
}
}
export function createBucket(bucket){
return {
type: CREATE,
bucket: bucket
};
}
const 액션타입변수이름 = "액션타입이름"
const CREATE = "bucket/CREATE";
const DELETE = "bucket/DELETE";
export default function reducer(state = initialState, action = {}) {
switch (action.type) {
case "bucket/CREATE": {
const new_bucket_list = [...state.list, action.bucket];
return {list : new_bucket_list};
}
case "bucket/DELETE": {
const new_bucket_list = state.list.filter((l, idx) => {
return parseInt(action.bucket_index) !== idx;
});
return {list: new_bucket_list};
}
default:
return state;
}
}
dispatch(액션생성함수명);
const initialState = {
list: ["영화관 가기", "매일 책읽기", "수영 배우기"],
};
// action creater
// type: createBucket라는 함수는 어떤 액션 타입을 사용하고 있는지에 대한 정보
// bucket: 들어온 값을 bucket에 넣어줌. 이 값은 action.bucket으로 가져올 수 있음
// 들어온 변수를 action.bucket으로 return한다.
export function createBucket(v){
return {type: CREATE, bucket: v};
}
// reducer
// action type으로 케이스를 분기한다.
// 해당 type의 action creator를 호출할 경우 action creator와 어떻게 상호 작용할 것인지 정의
// 아래의 경우는 state.list(initialState 한 것) 과 action.bucket(createBucket에 변수로 들어온 것) 을 합쳐서 new_bucket_list라는 array를 만든다.
// createBucket을 호출하면 list: new_bucket_list 가 포함된 object를 반환한다.
export default function reducer(state = initialState, action = {}) {
switch (action.type) {
case "bucket/CREATE": {
const new_bucket_list = [...state.list, action.bucket];
return {list : new_bucket_list};
}
}
dispatch(createBucket(text.current.value));
컴포넌트 A는 리덕스 스토어를 구독하고 있습니다. 리덕스에 저장된 데이터가 변경되었을 때(A가 구독 중인 값이 변경되었다고 가정합니다.), 어떤 과정을 거쳐 컴포넌트 A가 변경된 값을 가져올 수 있는 지 흐름을 그려볼까요?