React가 하는 일 (리액트의 핵심 모듈 2개로 리액트가 하는 일 알아보기)
// React Component 를 => HTMLElement 에 연결한다.
import ReactDom from 'react-dom';
// React Component 를 만든다.
import React from 'react';
// ReactDom 은 마치 main과 같다. app의 시작함수이다.
ReactDom.render(
<MyComponent name="malza" />,
docunemt.getElementById('hello-example')
);
Component 를 만든다! 하면 거의 무조건 import React from 'react';
해 가지고 무언가를 하게 된다.
<style>
* {
padding: 0;
margin: 0;
border: 0;
}
#root p {
color: white;
font-size: 20px;
background-color: rosybrown;
text-align: center;
width: 200px;
}
#btn_plus {
background-color: royalblue;
border: 2px solid black;
font-size: 15px;
width: 200px;
}
</style>
<body>
<div id="root"></div>
<button id="btn_plus">+</button>
<script>
// const component = {
// message: 'init',
// count: 0,
// render() {
// return `<p>${this.message} : ${this.count}</p>`;
// }
// };
// function render(rootElement, component) {
// rootElement.innerHTML = component.render();
// }
// render(document.querySelector('#root'), component);
// document.querySelector('#btn_plus').addEventListener('click', () => {
// component.message = 'update';
// component.count = component.count + 1;
// render(document.querySelector('#root'), component);
// })
const Component = props => {
return React.createElement('p', null, `${props.message} : ${props.count}`)
}
ReactDOM.render(React.createElement(Component, {message: 'init', count: 0}, null),
document.querySelector('#root'));
document.querySelector('#btn_plus').addEventListener('click', () => {
ReactDOM.render(React.createElement(Component, {message: 'update', count: 10}, null),
document.querySelector('#root'));
})
</script>
</body>
React.createElement 는 실제 Dom 이 아니라 virtual Dom 을 가지고 있다가, 실제 Dom 에 반영 해
준다.