노는게 제일 좋습니다.
React setState와 후속 코드의 실행순서 뒤바뀜 해결 본문
state를 변화시킨 뒤에 실행되어야 하는 코드가 있을 때, 단순히 위-아래의 순서로 나열해서는 의도대로 동작하지 않을 수 있다.
// Class component
export default class App extends React.Component {
state = {
a : true,
};
setState( { a : false } );
goHome();
render () {
return ( < > ~-~-~-~- </ > );
}
}
function goHome () {
// 퇴근시켜주세요!! 퇴근시켜주세요!!
}
//function component
export default function App() {
const [a, setA] = useState(true);
setA(false);
goHome();
return ( < > ~-~-~-~- </ > );
}
function goHome () {
// 퇴근시켜주세요!! 퇴근시켜주세요!!
}
위 코드의 원래 의도는 state값 a를 변화시키고 > 렌더링하고 > goHome을 실행하는 것이었다.
// Class component : SOLVED
export default class App extends React.Component {
state = {
a : true,
};
setState( { a : false }, goHome );
render () {
return ( < > ~-~-~-~- </ > );
}
}
클래스 컴포넌트의 setState의 경우 콜백으로 goHome을 넣어주면 해결된다
//function component : SOLVED
export default function App() {
const [a, setA] = useState(true);
useEffect(
() => { goHome(); }
, [a]
);
setA(false);
return ( < > ~-~-~-~- </ > );
}
함수 컴포넌트에서 훅을 사용한다면 useEffect를 사용하면 해결된다.
'웹' 카테고리의 다른 글
배열 state가 업데이트 되었음에도 re-rendering되지 않는 경우 (0) | 2021.03.12 |
---|---|
react.js로 ant-design 시작하기 (0) | 2021.02.28 |
react + express 세션이 제대로 박히지 않는 경우 (0) | 2021.02.12 |
Nomad Coders : 바닐라JS로 그림판 만들기 수강 (0) | 2021.02.05 |
웹뷰만 달랑 있는 안드로이드 앱 만들기 : 설치부터 배포까지 (1) | 2021.02.02 |
Comments