강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của teo
teo

câu hỏi đã được viết

Lập trình React thực tế

Một số mẹo sử dụng Redux

setValue 함수 질문 있습니다.

Viết

·

819

0

현재 whois 프로젝트 진행중인데요.

    function setKeyword(value) {
        if (value !== keyword) {
            dispatch(actions.setValue("keyword", value));
            dispatch(actions.fetchAutoComplete(value));
        }
    }
export const actions = {
    setValue: createSetValueAction(Types.SetValue),
    fetchAutoComplete: (keyword) => ({
        type: Types.FetchAutoComplete,
        keyword,
    }),
};
export function createSetValueAction(type) {
    return (key, value) => ({ type, key, value });
}

이 부분에서 actions.setValue 함수 부분이 이해가 안갑니다.ㅠㅠ createSetValueAction 함수에서 type만 받았는데 return 에서 key와 value를 어디에서 가져오는건가요?? setValue에서 들어간 값들이 인자로 들어가는거 같은데 이해가 안가네요ㅠㅠ

reactredux

Câu trả lời 1

0

landvibe님의 프로필 이미지
landvibe
Người chia sẻ kiến thức

안녕하세요
createSetValueAction는 함수를 반환하고 있는데요
그래서 아래처럼 생각하시면 이해가 쉬울 것 같습니다

export const actions = {
    setValue: (key, value) => ({ type: Types.SetValue, key, value }),
    ...
};

createSetValueAction를 호출하는 순간에 key, values는 값이 아니고 함수의 매개변수를 표현한 것이라고 이해하시면 될 것 같습니다

Teo님의 프로필 이미지
Teo
Người đặt câu hỏi

너무 감사합니다! 한번에 이해가 됐어요..!

한가지 더 질문드릴게 있는데,

const reducer = createReducer(INITIAL_STATE, {
    [Types.StValue]: setValueReducer,
});
export function createReducer(initialState, handlerMap) {
    return function (state = initialState, action) {
        const handler = handlerMap[action.type];
        if (handler) {
            if (action[NOT_IMMUTABLE]) {
                return handler(state, action);
            } else {
                return produce(state, (draft) => {
                    const handler = handlerMap[action.type];
                    handler(draft, action);
                });
            }
        } else {
            return state;
        }
    };
}

createReducer에서 넘어가는 handlerMap에는 [Types.SetValue] 가 들어가는게 맞나요?

예를 들어서 reducer에 [Types.SetTotal], [Types.SetValue] 두개가 있다고 한다면

HandlerMap으로 두개가 들어가고, action.type의 핸들러를 찾아서 반환..까지 맞을까요?

return hanlder(draft, action) 이 부분은 setValueReducer(draft, action) 이라고

봐도 되는건가요?

 

landvibe님의 프로필 이미지
landvibe
Người chia sẻ kiến thức

네 말씀하신 내용 모두 맞습니다

action.type의 핸들러를 찾아서 반환

다만 위에 말씀하신 내용은 엄밀하게 얘기하면 `action.type의 핸들러를 찾아서 실행 후 반환`이라고 이해하시면 될 것 같아요

Hình ảnh hồ sơ của teo
teo

câu hỏi đã được viết

Đặt câu hỏi