리액트를 다시 공부하려고 하니 잊어버린게 너무 많아서 공식문서를 토대로 다시 복습하려고 한다.
공식문서대로 리액트 차근차근 익혀보기
const name = 'Josh perez'
const element = <h1>Hello,{name}</h1>
ReactDOM.render(
element,
document.getElementById('root')
)
JSX의 중괄호 안에는 유효한 모든 Javascript 표현식을 넣을 수 있으며, JSX도 표현식이기 때문에 컴파일이 끝나면 JSX표현식이 Javascript 객체로 인식된다.
즉 JSX를 if문이나 for 반복문 안에 사용하고 변수에 할당하고, 인자로서 받아들이고, 함수로부터 반환할 수 있다.
function getGreeting(user){
if(user){
return <h1> Hello,{formatName(user)}!</h1>
}
return <h1>hello starnger</h1>
}
const element = <div tabIndex="0"></div>
const element = <img src={user.avatarUrl}></img>
const element = <img src={user.avatarUrl} />
const greeting = (
<div>
<h1>hello</h1>
<h2>goot to see you</h2>
</div>
)
function Welcome(props){
return <h1>Hello, {props.name}</h1>
}
const element = <Welcome name="Sara" />
React.DOM.render(
element,
document.getElementById('root')
)
위 예시에서는 다음과 같은 순서로 일이 일어난다.
1. 엘리먼트로 React.DOM.render()를 호출
2. React는 {name:'Sara'}를 propr로 하여 Welcome 컴포넌트를 호출
3. Welcome 컴포넌트는 결과적으로 Hello, Sara 엘리먼트를 반환
4. React DOM은 Hello, Sara 엘리먼트와 일치하도록 DOM을 효율적으로 업데이트 함.
// 코드도 길고, 재사용성이 어려운 코드
import React from 'react'
function formatDate(date) {
return date.toLocaleDateString();
}
function Comment(props) {
return (
<div className="Comment">
<div className="UserInfo">
<img className="Avatar"
src={props.author.avatarUrl}
alt={props.author.name} />
<div className="UserInfo-name">
{props.author.name}
</div>
</div>
<div className="Comment-text">
{props.text}
</div>
<div className="Comment-date">
{formatDate(props.date)}
</div>
</div>
);
}
const comment = {
date: new Date(),
text: 'I hope you enjoy learning React!',
author: {
name: 'Hello Kitty',
avatarUrl: 'http://placekitten.com/g/64/64'
}
};
export default function Extraction() {
return (
<div>
<Comment
date={comment.date}
text={comment.text}
author={comment.author} />
</div>
)
}
위 코드를 재사용성이 좋게 바꿔보면 아래와 같이 바꿀 수 있다.
import React from 'react'
function formatDate(date) {
return date.toLocaleDateString();
}
function Avatar(props){
return(
<img className="Avatar"
src={props.user.avatarUrl}
alt={props.user.name} />
)
}
function UserInfo(props){
return (
<div className="UserInfo">
<Avatar user={props.user}/>
<div className="UserInfo-name">
{props.user.name}
</div>
</div>
)
}
function Comment(props) {
return (
<div className="Comment">
<UserInfo user={props.author} />
<div className="Comment-text">
{props.text}
</div>
<div className="Comment-date">
{formatDate(props.date)}
</div>
</div>
);
}
const comment = {
date: new Date(),
text: 'I hope you enjoy learning React!',
author: {
name: 'Hello Kitty',
avatarUrl: 'http://placekitten.com/g/64/64'
}
};
export default function Extraction() {
return (
<div>
<Comment
date={comment.date}
text={comment.text}
author={comment.author} />
</div>
)
}