props로 받아온 값을 useState의 초기값으로 사용하여 렌더링 할 때 값이 분명 변경되었는데 useState에 들어간 값이 변하지 않는 문제가 생겼다.
이유는 useState의 초기값으로 props를 사용했기 때문이다.
const Box = ({ num }) => {
const [boxState, setBoxState] = useState(num);
return <div>box State ${boxState}</div>;
};
const App = () => {
const [parentState, setParentState] = useState();
return (
<div className="App">
<div>parent state: {parentState}</div>
<Box num={parentState} />
</div>
);
);
이렇게 Box컴포넌트에서 전달받은 num이라는 props를 useState의 초기값으로 할당하게 되면 App컴포넌트의 parentState가 변경되더라도 Box컴포넌트의 boxState는 변함이 없다.
useState는 한번만 호출되기 때문이다.
props로 useState에 초기값으로 할당하고 싶으면 useEffect를 사용해야 한다.
const Box = ({ num }) => {
const [boxState, setBoxState] = useState(num);
useEffect(() => {
setBoxState(num);
}, [num]);
return <div>box State ${boxState}</div>;
};
const App = () => {
const [parentState, setParentState] = useState();
return (
<div className="App">
<div>parent state: {parentState}</div>
<Box num={parentState} />
</div>
);
);
useEffect를 사용해서 props로 받아오는 num값이 변경될 때마다 boxState를 변경해주어야 원하는 동작을 할 것이다.
'에러 해결' 카테고리의 다른 글
[Cookies] attributes.expires.toUTCString is not a function (0) | 2022.04.14 |
---|---|
[Git] E325: ATTENTIONFound a swap file by the name ~ 에러 해결 방법 (0) | 2022.01.12 |
[React]Cannot update a component (`Transaction`) while rendering a different component (0) | 2021.12.10 |
[React] Invalid DOM property `for`. Did you mean `htmlFor`? (0) | 2021.10.27 |
[React] 이미지파일 Module not found (0) | 2021.09.12 |