<!DOCTYPE html>
<html lang="en">
<body>
<div id="root"></div>
</body>
<script src="https://unpkg.com/react@17.0.2/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@17.0.2/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script type="text/babel">
//JSX텍스트 변환을 위해선 꼭 TYPE을 적어줘야 한다.
const root = document.getElementById("root");
function Title() {
return (
<h3 id="title" onMouseEnter={() => console.log("mouse Entered")}>
Hello I'm a title
</h3>
);
}
const Button = () => (
// 이것은 arrow function이라고 부른다.
<button
style={{ backgroundColor: "tomato" }}
onClick={() => console.log("i'm clicked")}
>
Click me
</button>
);
const Container = (
<div>
<Title />
<Button /> //직접 만든 요소는 모두 대문자여야 한다 !!
</div>
);
//container에 이 위 Title 과 Button을 포함하기 위해서는 함수로 바꿔주는 것이 필요하다.
//마치 html 태그인 것처럼 포함시킨다.
//이것은 마치 여러 컴포넌트들이 합쳐진 구성을 하고 있다. 코드를 여기 복붙하는 것과 같다.
//작은 요소로 만들어 관리할 수 있기에 편리하다. 코드를 분리한 후 렌더링 가능하다.
// 즉
// <div> <Title /> </div> 은 ↓↓↓↓
//<div>
// <h3 id="title" onMouseEnter={() => console.log("mouse Entered")}>
// Hello I'm a title
// </h3>
// </div> 이것과 같다 ↑↑↑↑↑
// 버튼만 부분적으로 업데이트 되는 장점이 있다. 코드 분리가 되어 수정이 쉽다. 재 렌더링 효율이 높다
ReactDOM.render(Container, root);
//아니면 Container을 함수로 만들여서 위에 <Container />해서 넣어줘도 된다.
</script>
</html>
onMouse : ()=> 했던것 대신 괄호 안에 쓰는 방식으로 바꾸고 Babel에게 코드를넘겨준 것이다.
Element 에서 Babel에서 변환하기 전과 후의 코드가 나타난다.
직접 만든 컴포넌트를 렌더링 해서, 다른 곳에 사용할 때는 꼭 대문자여야 한다. 그렇게 하지 않으면 html요소가 된다.