해당 로직들은 자바스크립트와 리액트의 차이점을 두고 리액트의 장점을 설명한다
<div id="root"></div> <script> const rootElement = document.getElementById("root"); function random() { const number = Math.floor(Math.random() * (10 - 1) + 1); const element = `<button>${number}</button>`; rootElement.innerHTML = element; } setInterval(random, 1000); </script>
해당 number 는 1초 간격으로 바뀌는데, 개발자 도구를 살펴보면 div id root 와 button 이 같이 바뀌는걸 확인 가능하다
아랫로직은 리액트이다
<script type="text/babel"> const rootElement = document.getElementById("root"); function random() { const number = Math.floor(Math.random() * (10 - 1) + 1); const element = <button>{number}</button>; ReactDOM.render(element, rootElement); } setInterval(random, 1000); </script>
해당 버튼은 1초당 button 자체만 바뀌는게 확인 가능하다
<script type="text/babel">
function tick() {
const element = (
<div>
<h1>Hello, world!</h1>
<h2>It is {new Date().toLocaleTimeString()}.</h2>
</div>
);
ReactDOM.render(element, document.getElementById("root"));
}
setInterval(tick, 1000);
</script>
개발자도구를 찍으면 시간만 바뀐다. 바뀌는 부분만 바뀌는 장점? 아직 언제 사용 왜 이렇게 돼야 하는지 모름
<script type="text/babel">
const rootElement = document.getElementById("root");
const handleClick = () => alert("pressed");
const element = <button onClick={handleClick}>Press</button>;
ReactDOM.render(element, document.getElementById("root"));
setInterval(tick, 1000);
</script>
button 에 onClick 을 보면 컬리 괄호로 감쌋는데, 괄호를 주지 않았다, 버튼을 클릭하면 handleClick 이 실행된다
자바스크립트에서는 handclick() 으로 불러야 한다. 클릭해서 handleClick 을 실행하겠다라는 의미인듯
const target = { a: 1, b: 2 }; const sources = [ { b: 4, c: 5 }, { b: 6, c: 7, d: 8 }, { b: 9, c: 10, d: 11 }, { b: 12, c: 13, d: 14, e: 15 }, ]; Object.assign(target, ...sources); console.log(target);
Object.assgin(target,...sources) 첫번째 인자값이 두 번째 인자값에 덮어쓰기 당함
input 박스에 쓴 글 p 태그에도 자동으로 적히게 하기
const rootElement = document.getElementById("root");
const state = { keyword: "", typing: false, result: "" };
const App = () => {
function handleChange(event) {
setState({ keyword: event.target.value });
}
return (
<>
<input onChange={handleChange} />
<button children="press me" />
<p>Looking for {state.keyword}</p>
</>
);
};
function setState(newState) {
Object.assign(state, newState);
render();
}
function render() {
ReactDOM.render(<App />, rootElement);
}
render();
</script>
const rootElement = document.getElementById("root");
const state = { keyword: "", typing: false, result: "" };
const App = () => {
function handleChange(event) {
setState({ typing: true, keyword: event.target.value });
}
function handleClick() {
setState({
typing: false,
result: `we find results of ${state.keyword}`
});
}
return (
<>
<input onChange={handleChange} />
<button onClick={handleClick} children="press me" />
<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>
글을 적이 않았을때 빈 p 이다, state 의 result 기본값이 false 라서, typing 을 시작하면 setState가 handleChange 로 가서 setState 의 typing 을 true 로 만든다. 그래서 Looking for 가 참이라서 출력된다,