왜 내 리덕스는 값이 안 바뀌나

MM·2023년 9월 25일

make it worth

목록 보기
6/10
post-thumbnail

await를 써도 dispatch를 기다리지 않는 이유

😲 dispatch는 비동기가 아니니까!

그런데 왜 ... 표시가 안 되냐고.

console.log("초기:", initData); //초기값
await dispatch(templateActions.setInitData(await fetchInitData()));
console.log("나중:", initData); //초기값

-> dispatch가 redux를 업데이트 하기 전에 콘솔2가 먼저 찍힌다.

어떻게 해결해야 할까?

아래처럼 selector를 한번 더 정의해서 값을 업데이트해주면 된다고,

console.log("초기:", initData);
await dispatch(templateActions.setInitData(await fetchInitData()));
const updatedInitData = useSelector(state => state.template.initData);
console.log("나중:", updatedInitData);

-> 함수 내에서 이루어질 땐? 최상단이 아니라 useSelector를 못 쓰잖아!
-> useState를 따로 만들어서 사용해야 할까?
-> 클로저 문제 방지를 위해 그냥 값을 전달해야 할까?

시작됐다..나의 useEffect 연쇄가.

dispatch(templateActions.setInitData(await fetchInitData()));

useEffect(()=>{
	if(initData) console.log("나중");
},[initData]

해당 값을 감시하는 useEffect 내에서 값 수정 후 발생해야 하는 기능을 넣어 해결.
이러한 useEffect연쇄에 대해 부정적인 글을 본 적이 없지만, 긍정적인 글도 본 적 없다.🤔 남용은 하지 말아야겠다.

profile
중요한 건 꺾여도 그냥 하는 마음

0개의 댓글