<!DOCTYPE html>
<html lang="en">
<body>
<script
crossorigin
src="https://unpkg.com/react@17/umd/react.development.js"
></script>
<script
crossorigin
src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"
></script>
<script
crossorigin
src="https://unpkg.com/@babel/standalone/babel.min.js"
></script>
<div id="root"></div>
<script type="text/babel">
const rootElement = document.getElementById("root");
const Child = () => {
console.log(" Child render start");
const [text, setText] = React.useState(() => {
console.log(" Child useState : text");
return "";
});
const handleChange = (e) => {
setText(e.target.value);
};
React.useEffect(() => {
console.log(" Child useEffect : empty deps");
return () => {
console.log(" Child useEffect : [Cleanup], empty deps");
};
}, []);
React.useEffect(() => {
console.log(" Child useEffect : no deps");
return () => {
console.log(" Child useEffect : [Cleanup], no deps");
};
});
React.useEffect(() => {
console.log(" Child useEffect : show deps");
return () => {
console.log(" Child useEffect : [Cleanup], text deps");
};
}, [text]);
const element = (
<>
<input onChange={handleChange} />
<p>{text}</p>
</>
);
console.log(" Child render end");
return element;
};
const App = () => {
console.log("App render start");
const [show, setShow] = React.useState(() => {
console.log("App useState : show");
return false;
});
const handleClick = () => {
setShow((prev) => !prev);
};
React.useEffect(() => {
console.log("App useEffect : no deps");
return () => {
console.log("App useEffect : [Cleanup], no deps");
};
});
React.useEffect(() => {
console.log("App useEffect : empty deps");
return () => {
console.log("App useEffect : [Cleanup], empty deps");
};
}, []);
React.useEffect(() => {
console.log("App useEffect : show deps");
return () => {
console.log("App useEffect : [Cleanup], show deps");
};
}, [show]);
console.log("App render end");
return (
<>
<button onClick={handleClick}>search</button>
{show && <Child />}
</>
);
};
ReactDOM.render(<App />, rootElement);
</script>
</body>
</html>
App render 시작
App useState
App render 끝
App useEffect 모두 동작
App render 시작
App render 종료
Child render 시작
Child useState
child render 종료
App useEffect Cleanup
Child useEffect
App useEffect