// 왼쪽: JS, 오른쪽: HTML
const element = <h1>Hello, world!</h1>;
React
의 createElement()
: JSX 코드를 JS코드로 변환하는 것
class Hello extends React.Component{
render() {
return <div>Hello {this.props.toWhat}</div>;
}
}
ReactDOM.render(
<Hello toWhat = "World" />,
document.getElementById('root')
);
class Hello extends React.Component{
render(){
return React.createElement('div', null, `Hello ${this.props.toWhat}`);
}
}
ReactDOM.render(
React.createElement(Hello, {toWhat: 'World'}, null),
document.getElementById('root')
);
const element = (
<h1> className = "greeting">
Hello, World!
</h1>
const element = React.createElement(
'h1',
{ className: 'greeting' },
'Hello, World!'
)
위에서 말했듯이 React.createElement()
를 통해 JSX
코드가 JS
코드로 변환된다.
위의 코드가 React.createElemet()
의 결과로 아래와 같은 객체로 생성된다.
const element = {
type: 'h1',
props: {
className: 'greeting',
children: 'Hello, World!'
}
}
React.createElement(
type,
[props],
[...childer]
)
type
: element 유형(타입).div
나span
과 같은HTML
태그가 올 수도 있고 다른 컴포넌트가 올 수도 있음
props
: 속성
children
: 현재 element가 포함하고 있는 자식 element
function formatName(user){
return user.firstName + ' ' + user.lastName;
}
const user = {
firstName: 'Ming',
lastName: 'Kim'
};
const element = (
<h1>
Hello, {formatUser(user)}
</h1>
);
ReactDOM.render(
element,
document.getElementById('root')
);
// user의 이름에 따라 다른 인삿말을 표시하는 컴포넌트
function getGreeting(user){
if (user){
return <h1>Hello, {formatName(user)}!</h1>;
}
return <h1>Hello, Stranger.</h1>
}
//큰 따옴표 사이에 문자열을 넣거나
const element = <div tabIndex="0"></div>;
//중괄호 사이에 자바스크립트 코드를 넣으면 됨
const element = <img src={user.avatarUrl}></img>;
const element = (
<div>
<h1>안녕하세요</h1>
<h2>열심히 리액트를 공부해 봅시다!</h2>
</div>
)
import React from "react";
function Book(props) {
return (
<div>
<h2>{`책 이름: ${props.name}`}</h2>
<h3>{`${props.name}의 페이지 수: ${props.numOfPage}페이지`}</h3>
</div>
);
}
export default Book;
import React from "react";
import Book from "./Book";
function Library(props) {
return (
<div>
<Book name="처음 만난 파이썬" numOfPage={300} />
<Book name="처음 만난 자바" numOfPage={51} />
<Book name="처음 만난 리액트" numOfPage={210} />
</div>
);
}
export default Library;
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import reportWebVitals from './reportWebVitals';
import Library from './ch03/Library'
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<Library />
</React.StrictMode>
);
reportWebVitals();
import React from "react";
function Book(props) {
return React.createElement("div", null, [
React.createElement(
"h1",
null,
`책 이름: ${props.name}`),
React.createElement(
"h2",
null,
`${props.name}의 페이지 수: ${props.numOfPage}페이지`
),
]);
}
export default Book;