dispatch 함수도 리렌더링 유발하지 않나요?
203
작성한 질문수 11
안녕하세요 선생님
const nextState = formReducer(state, {type : "VALIDATE", validate })
로 nextState를 정의하셨는데
애초에 SET_TOUCHED_ALL 디스패치가 실행되면 리렌더링
VALIDATE 디스패치가 실행되면 또 리렌더링 되어 onSubmit 함수가 정상 동작해야 될거 같은데..
그렇게 생각하면 안되는 이유가 궁금합니다.!
답변 2
0
리액트에서 dispatch를 호출하면 상태가 즉시 변경되는 것이 아니라, 다음 렌더링에서 반영됩니다. 즉, dispatch 직후에 상태 값을 읽으면 여전히 이전 상태가 유지됩니다.
리액트 공식 문서 내용 참고: https://react.dev/reference/react/useReducer
"The dispatch function only updates the state variable for the next render. If you read the state variable after calling the dispatch function, you will still get the old value that was on the screen before your call."
이 코드에서 onSubmit() 함수가 실행될 때, 상태 값이 즉시 반영되지 않으므로 갱신된 상태를 직접 계산하기 위해 formReducer(state, { type: "VALIDATE", validate })를 사용한 것입니다.
이렇게 하면 현재 렌더링에서 사용할 상태를 미리 계산하여 onSubmit()에서 올바른 값을 전달할 수 있습니다.
즉, dispatch를 여러 번 호출해도 각 상태 변경은 다음 렌더링에서 적용되기 때문에, 동일한 렌더링 내에서 즉시 변경된 값을 활용하려면 dispatch 후의 상태가 아닌, 직접 계산한 값을 사용해야 합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
이재은님의 질문에 대해 기존에 유사한 질문과 답변을 제공한 사례가 있는지 찾아보았습니다.
dispatch 함수 자체는 상태를 업데이트하는 트리거 역할을 하지만, dispatch에 의해 상태가 변경되는 경우에만 리렌더링이 발생합니다. React에서 컴포넌트는 상태(state)나 props가 변경될 때마다 리렌더링이 됩니다. 즉, dispatch가 호출되었다고 해서 바로 리렌더링되는 것이 아니라, dispatch로 인해 상태가 변경되면 리렌더링이 일어납니다.
관련 질문:
useReducer로 상태 관리 시의 리렌더링 관련 질문
ReactuseReducer와useState를 사용할 때 컴포넌트의 리렌더링 트리거 조건에 대한 설명이 포함되어 있습니다.리덕스의 dispatch가 리렌더링을 유발하는가?
Redux 및dispatch호출이 직접적인 리렌더링과 어떤 관계가 있는지 설명합니다.
이 두 질문은 React에서 dispatch 함수 사용 시 상태 관리 방법과 리렌더링의 관점에 대해 자세한 설명을 제공합니다. 이재은님께서 궁금해 하시는 부분인 onSubmit 함수의 동작 메커니즘도 이러한 맥락에서 이해할 수 있습니다. SET_TOUCHED_ALL 혹은 VALIDATE 같은 액션은 상태 변화를 일으키지만, 그저 dispatch하는 것만으로 리렌더링이 보장되는 것은 아니며, 상태가 변하면 리렌더링이 발생하게 됩니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
잘못된 useEffect 사용?
1
65
2
useEffect 의존성 질문
1
57
2
orderableProductItem 에 관하여...
0
56
2
강의 자료, 블로그, 깃 주소
0
63
1
React 훅 구현 원리와 실무 패턴 관련 질문 (useState, useEffect 순서 및 핸들러 구조)
1
104
2
pushState로 주소를 바꾸면 렌더링이 안 되는 이유가 궁금합니다.
1
87
2
FormControl 컴포넌트 사용시 htmlFor prop 값 넘길 때 중괄호 이유
1
123
1
ProductItem에서 onClick = {onClick}을 달지 않아도 되는 이유
1
160
2
replaceState를 쓰지 않는 대안
1
196
2
setValue 메서드를 바인딩 해야 하는 이유
1
163
2
MyReact를 IIFE(즉시실행함수)로 설계하신 이유
0
208
2
[4.4장 메모이제이션 훅] 4.4.3 memo 참조 비교
0
129
1
useRef 관련하여 질문드립니다
0
152
2
렌더 프롭 관련하여 질문드립니다
0
183
2
[1.2장 상품목록 화면] 1.2.3 Button ...rest 관련 질문 드립니다.
1
395
2
[4.4장 메모이제이션 훅] 4.4.4 useCallback curried function에 관한 질문입니다.
1
317
2
[4.4장 메모이제이션 훅] 4.4.2 useMemo 에서 every 함수에 관한 질문입니다.
1
355
2
[4.3장 리듀서 훅] 4.3.7 활용 MyForm(풀이) 오타 제보 및 질문이 있습니다.
1
281
2
[4.1장 레프 훅] useRef관련 질문이있습니다.
1
334
1
[1.3장 주문 내역 화면] 1.3.5 Card 조합 질문 있습니다
2
284
1
[3.5장 컨택스트 훅] 3.5.2 useContenxt 에서 질문이 있습니다.
1
432
2
[1.3.6 상태정의] state 관련
1
259
1
[2.4장 다이얼로그 1] 2.4.5 withLayout(풀이) 에 관한 질문입니다.
1
272
1
[2.1장 컨택스트] 2.1.4 공급자와 소비자 / 에서 질문이 있습니다.
1
425
2





