해당 포스트는 코드아카데미의 React 101 강의의 필기입니다.
class
vs className
// HTML
<h1 class="big">Hey</h1>
// JSX
<h1 className="big">Hey</h1>
JSX에선 camelCase로 된 className
속성을 써야함
JSX에선 self-closing tag의 경우 항상 < />
슬래시 사용해야함
{}
사용ReactDOM.render(
<h1>2 + 3</h1>,
document.getElementById('app')
);
// Output: 2 + 3
ReactDOM.render(
<h1>{2 + 3}</h1>,
document.getElementById('app')
);
// Output: 5
{}
// Declare a variable:
const name = 'Gerdo';
// Access your variable
// from inside of a JSX expression:
const greeting = <p>Hello, {name}!</p>;
{}
사용const sideLength = "200px";
const panda = (
<img
src="images/panda.jpg"
alt="panda"
height={sideLength}
width={sideLength} />
);
// 객체의 경우에도
const pics = {
panda: "http://bit.ly/1Tqltv5",
owl: "http://bit.ly/1XGtkM3",
owlCat: "http://bit.ly/1Upbczi"
};
const panda = (
<img
src={pics.panda}
alt="Lazy Panda" />
);
https://reactjs.org/docs/events.html#supported-events
on***
의 형태로 요소의 속성으로 들어감
function myFunc() {
alert('Make myFunc the pFunc... omg that was horrible i am so sorry');
}
<img onClick={myFunc} />
function makeDoggy(e) {
e.target.setAttribute('src', 'https://content.codecademy.com/courses/React/react_photo-puppy.jpeg');
e.target.setAttribute('alt', 'doggy');
}
const kitty = (
<img
src="https://content.codecademy.com/courses/React/react_photo-kitty.jpg"
alt="kitty"
onClick={makeDoggy}
/>
);
e = kitty가 되고, setAttribute를 통해 속성이 변함
🔥 JSX의
{}
에는 if문을 넣을 수 없음!!
function coinToss() {
return Math.random() < 0.5 ? 'heads' : 'tails';
}
const pics = {
kitty: 'https://content.codecademy.com/courses/React/react_photo-kitty.jpg',
doggy: 'https://content.codecademy.com/courses/React/react_photo-puppy.jpeg'
};
let img;
if (coinToss() === 'heads') {
img = <img src={pics.kitty} />;
} else {
img = <img src={pics.doggy} />;
}
ReactDOM.render(img, document.getElementById('app'))
렌더될 대상인 img
요소는 그냥 선언만 해두고, jsx 밖의 조건문을 만들어 img 변수를 조작
x ? y : z
삼항연산자는 JSX안에 사용할 수 있음!!!
const headline = (
<h1>
{ age >= drinkingAge ? 'Buy Drink' : 'Do Teen Stuff' }
</h1>
);
&&
연산자어떨 때는 실행이 되고, 어떨 때는 아무것도 안일어나도록 하는 조건문에서 많이 사용
{ 조건 && 렌더링 할 요소 }
const tasty = (
<ul>
<li>Applesauce</li>
{ !baby && <li>Pizza</li> }
{ age > 15 && <li>Brussels Sprouts</li> }
{ age > 20 && <li>Oysters</li> }
{ age > 25 && <li>Grappa</li> }
</ul>
);
한 array에 담긴 값들로 여러개의 JSX 요소를 만들 때 사용
const strings = ['Home', 'Shop', 'About Me'];
const listItems = strings.map(string => <li>{string}</li>);
<ul>{listItems}</ul>
그러면 listItems 값은 배열로 도출되지만, JSX에선 배열도 제대로 렌더링 할 수 있음.
<ul>
<li>item 1</li>
<li>item 2</li>
<li>item 3</li>
</ul>
// 위랑 아래랑 똑같은 결과
const liArray = [
<li>item 1</li>,
<li>item 2</li>,
<li>item 3</li>
];
<ul>{liArray}</ul>
무언가의 리스트, 배열이 있을 때 JSX에서는 key
속성이 필요함.
<ul>
<li key="li-01">Example1</li>
<li key="li-02">Example2</li>
<li key="li-03">Example3</li>
</ul>
역할이 있는건 아니지만, React가 내부적으로 리스트 요소를 트래킹하는 데에 사용.
아래의 경우 key
가 필요함
// map의 index 인자를 이용하여 쉽게 key 만들기
const people = ['Rowe', 'Prevost', 'Gare'];
const peopleLis = people.map((person, i) => <li key={'person_' + i}>{person}</li>);
JSX없이 리액트 코드를 쓸 수 있음
const h1 = <h1>Hello world</h1>;
JSX로 만든 이 코드는
const h1 = React.createElement(
"h1",
null,
"Hello world"
);
이렇게 컴파일 됨. React.createElement
라는 메소드로!