리액트에서는 글자만 바뀌게 된다.
여러개의 element들이 있을 때, 변경점이 생기면 다른 element들의 배치에도 영향을 주게 된다.
프론트엔드의 최적화를 위해서 이점을 가질 수 있다. 바뀌어야 하는 부분만 바뀌게 되니까.
이 상황에서는 element(불변)를 만들고 ReactDOM.render에 주입했다.
그리고, setInterval 함수를 활용해서, 랜덤함수를 계속 호출해서 그렸던 것
타입이 바뀐 경우는? 이전 엘리먼트는 버리고 새로 그린다.
DOM(브라우저가 인지하고 있는 트리개념) -> 그린 것이 element => 그럼 리액트는 이것을 어떻게 비교할까 ? => 가상 돔(Virtual Dom)을 가지고 비교한다!!
toLocaleTimeString() : 날짜의 시간 부분을 언어에 따라 다르게 표현한 문자열을 반환
버튼을 클릭한 시점의 시간이 나온다!
버튼에 onclick 이벤트가 있고 => 그 때 어떤 동작을 할 지 정해놨음
script 태그로 이벤트 추가해보기
사용할 것
<div id="root"></div>
<script src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script type="text/babel">
const rootElement = document.getElementById("root");
const state = { keyword: "", typing: false, result: "" };
const App = () => {
const handelChange = (event) => {
setState({ keyword: event.target.value, typing: true });
};
const handelClick = (event) => {
setState({
typing: false,
result: `찾았다 ${state.keyword}`
});
};
return (
<>
<input onChange={handelChange} />
<button onClick={handelClick}>search</button>
<p>
{state.typing
? `Looking for....${state.keyword}...`
: state.result}{" "}
</p>
</>
);
};
function setState(newState) {
Object.assign(state, newState);
render();
}
function render() {
ReactDOM.render(<App />, rootElement);
}
render();
</script>