immer 패키지 없이 createReducer함수 작성 문의
import { createStore } from "redux";
import { createReducer } from "./createReducer";
export default function Chapter0603() {
return <div>실전 리액트</div>;
}
const INITIAL_STATE = { value: 0 };
const reducer = createReducer(INITIAL_STATE, {
INCREMENT: state => (state.value += 1),
});
const store = createStore(reducer);
let prevState;
// store.dispatch 를 호출하여 액션을 발생시켰을 때
// 액션이 끝이나면 store.subscribe 함수가 호출이 된다.
store.subscribe(() => {
const state = store.getState();
if (state === prevState) {
console.log('상탯값 같음');
} else {
console.log('상탯값 변경됨');
}
prevState = state;
});
store.dispatch({ type: 'INCREMENT' });
store.dispatch({ type: 'OTHER_ACTION' });
store.dispatch({ type: 'INCREMENT' });import produce from "immer";
export function createReducer(initialState, handlerMap) {
return function (state = initialState, action) {
return produce(state, draft => {
const handler = handlerMap[action.type];
if (handler) {
handler(draft, action);
}
});
};
};createReducer에서 immer 패키지 사용해서 불변객체로 리턴해주도록 하잖아요.
immer 이용하지않는 createReducer를 만들려면 어떻게 해야할까요?
그럴려면 직접 불변객체를 만들어줘야하는데, INCREMENT: state => state.value += 1 이 부분을
createReducer로 넘겨준 다음에 함수로써 실행하게 하는 부분을 만들지 못하겠네요.
답변 2
1
아직 js를 전부 아는 것이 아니라 proxy 사용법을 몰라 차차 공부해가며 한번 구현해봐야겠네요.
제가 라이브러리 급 함수를 구현할 수 있을지 모르겠네요 ㅎㅎ
답변 감사드립니다. 알려주신 링크 참고해보겠습니다!
1
안녕하세요
immer 를 사용하지 않는다면 immer 가 하는 일을 똑같이 구현해야하는데요
아래와 같이 요약할 수 있을 것 같아요
1. 객체에서 수정된 속성이 뭔지 파악한다 (객체의 모든 후손 객체에 대해서도 파악 필요)
2. 수정된 속성의 부모 객체를 새로 만든다 (레퍼런스 변경)
이를 구현하는 한 가지 방법으로 proxy 를 이용하는 방법이 있습니다
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
자동완성기능이 안되네요 ..
0
499
3
화면에 에러가나네요 ...
0
517
2
setValue 함수 질문 있습니다.
0
840
1
찾아야한다 실습 문의
0
469
1
훅 기초 익히기 - 배치 처리와 순차적 처리의 차이
0
470
1
cra, next.js 관련 질문 드립니다!
0
606
1
useState 배열 비구조화 문법 질문!
0
252
1
Uncaught TypeError: Failed to execute 'removeChild' on 'Node': parameter 1 is not of type 'Node'
1
1081
2
Saga 오류 이거 혹시 왜이런지 알수 있을까요?
0
371
2
http://localhost:3001/user/search?keyword=u 이걸로 데이터를 보는데 저는 사이트에 연결할 수 없다고 나오네요
0
657
1
match
1
495
1
버튼이 생성되지 않습니다 .
0
288
1
혹시 import 옆에 파일 사이즈 표시 어떻게 하나요?
0
262
1
saga 문제
0
248
1
에러가 발생하는데 이유가뭘까요..?
0
388
2
선생님과 똑같이 했는데 다 rendering 됩니다.
0
203
1
컴포넌트와 컨테이너의 기준
0
316
1
커스텀훅의 개념과 함수차이
1
1199
1
useEffect 실전 활용법(1) 강의에서 질문있습니다.
0
338
1
리덕스, 사가파일들의 관리
0
207
1
useImperativeHandle 질문 입니다.
0
281
1
컴파일 문의드립니다.
0
203
1
React.memo 관련 질문이 있습니다.
0
373
1
Context API vs Redux 사용 빈도
0
213
1





