Open j03y14 opened 1 year ago
import { useState } from 'react';
export default function App() {
const [isFancy, setIsFancy] = useState(false);
return (
<div>
{isFancy && <Counter isFancy={true} /> } --- A
{!isFancy && <Counter isFancy={false} /> }
{isFancy ? <Counter isFancy={true} /> : <Counter isFancy={false} /> } --- B
<label>
<input
type="checkbox"
checked={isFancy}
onChange={e => {
setIsFancy(e.target.checked)
}}
/>
Use fancy styling
</label>
</div>
);
}
function Counter({ isFancy }) {
const [score, setScore] = useState(0);
const [hover, setHover] = useState(false);
let className = 'counter';
if (hover) {
className += ' hover';
}
if (isFancy) {
className += ' fancy';
}
return (
<div
className={className}
onPointerEnter={() => setHover(true)}
onPointerLeave={() => setHover(false)}
>
<h1>{score}</h1>
<button onClick={() => setScore(score + 1)}>
Add one
</button>
</div>
);
}
트리리상의 위치가 변경된다. 왜냐하면, isFancy false일 때
false ,
이기 때문에
반면, B에서는 isFancy가 true일 때와 false일 때 모두
1.
2번에서는 기존컴포넌트가 삭제될 때 삭제 행위를 진행한다.(트리 삭제, state도 삭제) 1번에서는 기존컴포넌트가 트리상에서 삭제되지만, state는 트리 외부의 어딘가에 저장되기 때문에 남아있다가 사용되지않음을 감지해서 삭제한다.
1번이라고 생각한이유가 state가 컴포넌트에 저장되어있다고 생각해서 -> 컴포넌트가 다시불리면 initialize가 되니까 삭제 된것처럼 보인다 라고 생각함 근데, 위치만 유지되면 state가 유지되는 것을 보니, state는 별도로 저장되는 구조고, 트리상에 변화가 일어날때 state도 변화가 일어난다고 생각함
결국 상태가 삭제되는건 언제인지?
ui tree의 노드는 react element 이다. 각 element에서 useState를 사용하면 global workInProgress에 순서에 맞게 state를 저장한다.
ui tree 상의 element가 삭제될 때 state를 찾아서 삭제할것으로 예상된다.