JSX

Pros

  • JSX는 컴파일링 되면서 최적화 되므로, 빠르다.
  • Type-safe 하여 컴파일링 과정에서 에러를 감지 할 수 있다.
  • HTML에 익숙하다면, JSX를 사용하여 쉽고 빠르게 템플릿 작성이 가능하다.

app.js

import React form 'react';

class App extends React.Component {
    render() {

        return (
            <h1>Hello World</h1>
        );
    }
}

export default App;
  • import 는 ES6에 도입된 문법으로 var React = require('react'); 와 같다. React 모듈은 Component를 만들때 사용된다.
  • class 도 ES6 에 도입된 요소 중 하나이다. 모든 Component 는 React.Component 를 상속한다. ES5 환경에서는 React.createClass() 라는 메소드를 사용한다.
  • render() 메소드에서는 Component 에 렌더링 될 데이터를 정의 한다.
  • 자바스크립트에서 html 태그를 반환하는데, React JSX 는 XML-like syntax 를 native javascript 로 변환한다. 따라서, ““로 감싸지 않는다. () 를 사용하지 않아도 오류는 발생하지 않지만 가독성을 위하여 사용한다.
  • JSX 파일의 확장자는 이전에는 .jsx 확장자를 사용하였지만 현재 .js 를 사용하는 추세로 전환되고 있다.

JSX vs JS

class Hello extends React.Component {
    render() {
        return <div>Hello {this.props.name}</div>;
    }
}

ReactDOM.render(
    <Hello name="World" />,
    document.getElementById('container')
);
class Hello extends React.Component {
    render() {
        return React.createElement("div", null, "Hello ", this.props.name);
    }
}

ReactDOM.render(
    React.createElement(Hello, {name: "World"}),
    document.getElementById('container')
);

Nested Elements

  • 컴포넌트에서 여러 element를 렌더링 해야 할 때, 그 element 들은 container element 안에 포함 시켜야 한다.
  • 아래와 같이 코드를 작성하면 오류가 발생한다.
return  (
        <h1> Hello World</h1>
        <h2> Welcome </h2>
    );
  • div element 를 wrapper로 사용하면 오류가 발생하지 않는다.
return  (
        <div>
            <h1> Hello World </h1>
            <h2> Welcome </h2>
        </div>
);

Javascript Expression

  • JSX 안에서, javascript 표현을 사용하는 방법은 {} 로 wrapping 하면 된다.
render(){
    let text = "Web"
    return  (
        <div>
            <h1> Hello World </h1>
            <h2> Welcome to {text}</h2>
        </div>
    );
}
  • ES6에 도입된 let 키워드는 var 과 비슷하지만 var 변수의 scope은 함수 범위인데 let 은 블럭 범위이다. ES6 에서는 let 을 주로 사용하고, var 는 필요한 상황에서만 사용하는게 좋다.
  • {text} 를 사용하여 text javascript 변수를 렌더링 한다.

Create method

sayHey(){
   alert("hey");
}

render(){
    let text = "Web"
    return  (
        <div>
            <h1> Hello World </h1>
            <h2> Welcome to {text}</h2>
            <button onClick={this.sayHey}>Click Me</button>
        </div>
    );
}
  • {this.sayHey} 를 통하여 버튼이 클릭되면 해당 메소드가 실행된다.

if-else

  • JSX 안에서 사용되는 javascript 표현에는 if-else 문을 사용 할 수 없다.
  • ternary 표현은 가능하다. condition ? true : false

Inline style

  • React 의 Inline style 에서는, string 형식이 사용되지 않고 key 가 camelCase 인 object 가 사용된다.
render(){
    let text = "Web";

    let pStyle = {
        color: 'aqua',
        backgroundColor: 'black'
    };

    return  (
        <div>
            <h1> Hello Velopert </h1>
            <h2> Welcome to {text}</h2>
            <button onClick= {this.sayHey}>Click Me</button>
            <p style = {pStyle}>{1 == 1 ? 'True' : 'False'}</p>
        </div>
    );
}
  • pStyle 이 p element에 적용된다.

Comment

  • JSX 안에서 주석을 작성하려면, `{/* comments */ } 형식으로 작성한다.
  • container element 안에 주석이 작성되어야 한다.

Naming Convention

  • React Component 는 첫 문자가 대문자인 PascalCase 로 작성된다.