// Javascript code
return React.createElement(
'div',
{
onClick: () => setFollowing(!following),
style : following ? followBtnStyle : followingBtnStyle
},
following ? 'following' : 'Follow'
);
// JSX code
return(
<div
onClick = {() => setFollowing(!following)}
style = {following ? followBtnStyle : followingBtnStyle}
>
{following ? 'following' : 'Follow'}
</div>
);
JSX의 중괄호 안에는 유효한 모든 JavaScript 표현식을 넣을 수 있다.
예를 들어 2 + 2
, user.firstName
또는 formatName(user)
등은 모두 유효한 JavaScript 표현식이다.
function App() {
const message = 'Learn React';
const formatName = (user) => {
return `Hello, ${name}!! Learn React`;
};
return (
<div className="App">
{message}
{formatName('yeahzing')}
</div>
);
}
if
구문 및 for
loop 안에 사용하고, 변수에 할당하고, 인자로서 받아들이고, 함수로부터 반환할 수 있다.
function App() {
const getGreetingMessage = (name) => {
if( name === 'yeahzing') return `Hello, ${name}!! Learn React`;
return `Welcome, ${name}!! Learn React`;
};
return (
<div className="App">
{getGreetingMessage('yeahzing')}
</div>
);
}
중괄호를 사용하여 어트리뷰트에 JavaScript 표현식을 삽입할 수 있다.
function App() {
const logo = './logo.svg';
return (
<div className="App">
<img src={logo} />
</div>
);
}
JSX는 HTML보다는 JavaScript에 가깝기 때문에,
React DOM은 HTML 어트리뷰트 이름 대신 camelCase 프로퍼티 명명 규칙을 사용한다.
예를 들어, JSX에서 class는 className가 되고 tabindex는 tabIndex가 된다.
ex. class 와 for 같은 JavaScript 예약어는 class → className, for → htmlFor 로 사용
태그가 비어있다면 XML처럼 /> 를 이용해 바로 닫아주어야 한다.
const element = <img src={user.avatarUrl} />;
function App() {
const logo = './logo.svg';
return (
<div className="App">
<input type="checkbox" />
<p className="aaa" />
</div>
);
}
function App() {
const getGreetingMessage = (name) => {
if( name === 'yeahzing') return `Hello, ${name}!! Learn React`;
return `Welcome, ${name}!! Learn React`;
};
return (
<div className="App">
{getGreetingMessage('yeahzing')}
</div>
);
}
function App() {
const name = 'yeahzing';
return (
<div className="App">
{name === 'yeahzing' ? `Hello, ${name}!! Learn React` : `Welcome, ${name}!! Learn React`}
</div>
);
}
function App() {
const name = 'yeahzing';
return (
<div className="App">
{name === 'yeahzing' && `Hello, ${name}!! Learn React`}
// A === A && expression
// 조건이 true일 경우 : && 이후에 위치한 expression 반환
</div>
);
}
단, falsy 표현식을 반환하면 여전히 && 뒤에 있는 표현식은 건너뛰지만 falsy 표현식이 반환된다.
function App() {
const count = 0;
return (
<div className="App">
{count && <h1>Messages: {count}</h1>} // output : 0
// falsy 표현식이 안 나오게 하려면
// count 앞에 !or !!을 넣어 Boolean 값으로 명확하게 바꿔서 사용
// count → 0, !count → true, !!count → false
{!!count && <h1>Messages: {count}</h1>} // output :
</div>
);
}
++ 값이 없을 때 다른 텍스트는 보여주고 싶을 때
function App() {
const memo = '';
return (
<div className="App">
{memo && `메모: ${memo}`} // 아무것도 안 뜸
{memo !== null && `메모: ${memo}`} // '메모: ' 라고 뜸
</div>
);
}