[React] React 기초 - 1 (React의 장단점과 JSX문법)

Date:

카테고리:

태그:

React란

프론트앤드 개발을 위한 JS 오픈소스 라이브러리

React의 장점

  1. 선언형(Declarative) : JSX를 이용해 한 파일에 명시적으로 작성
  2. 컴포넌트 기반(Component-Based) : 독립적/재사용 가능 -> 기능 자체에 집중한 개발 가능
  3. 범용성(Learn Once, Write Anywhre) : JS 프로젝트에 유연하게 사용 가능

JSX란

JS의 확장문법, Babel을 통해 JS로 컴파일 후 화면에 렌더링

JSX의 기본문법

  • 동적 인터페이스 구현을 위해서는 수 많은 상태를 관리해야 함(DOM)
  • 웹 개발시 DOM, 상태값 관리를 최소화하고 기능구현에만 집중하게 함

프레임워크 : 개발구조나 설계 시 제공되는 인터페이스의 집합 라이브러리 : 특정 기능에 대해 API(도구/함수)를 모은 것

import React from "react";
import "./styles.css";

function App() {
  const user = {
    firstName: "React",
    lastName: "JSX Activity"
  };

  function formatName(user) {
    return user.firstName + " " + user.lastName;
  }
  // JSX 없이 활용한 React
  return React.createElement("h1", null, `Hello, ${formatName(user)}!`);
  // HTML과 JS로 나누어 있어 복잡함

  // JSX 를 활용한 React
  return <h1>Hello, {formatName(user)}!</h1>;
  // JSX에서 한번에 처리할 수 있어 
  // 코드의 복잡성을 줄이고, 이해하기 쉽게 만들 수 있음

}

export default App;

태그는 반드시 닫혀 있어야 함

  • html에서 클로징이 없는 input, br태그도 닫아줘야함
  • 같은 형태로 셀프 클로징 태그도 가능

감싸져 있는 엘리먼트

  • 두 개 이상의 엘리먼트는 무조건 하나의 엘리먼트로 감싸져 있어야 함
  • 태그 사용 어려울 시 로 감쌀 수 있음 (단, 상단에서 import 한 후에 사용가능)

자바스크립트 값 사용시에는 중괄호 사용

  • name 변수의 값을 사용하려면 {name} 형태로 표기
  • 중괄호 내에서 if문 사용을 위해 삼항연산자 사용
{
  x === 1 ? <div>x는 1입니다</div> : <div>x는 1이 아닙니다</div>;
}
// {판별 조건 ? (참일 때 출력값) : (거짓일 때 출력값)}
  • true일 때만 보여주려면 AND연산자 사용
{
  x === 1 && <div>x는 1입니다</div>;
}
// {판별조건 && 참일 때 출력 값}
  • 꼭 필요한 경우에는 즉시 실행 함수 표현(IIFE) 사용
    (복잡한 조건의 경우 되도록 JSX 밖에서 로직 작성)
<div>
  {(function () {
    if (x === 1) return <div>하나</div>;
    if (x === 2) return <div>둘이다</div>;
    if (x === 3) return <div>셋이다</div>;
  })()}
  // {(function(){함수의 내용})()}
  // 동일하게 중괄호로 감싸고 익명함수 즉시 실행('()')
</div>
  • 화살표 함수 사용 시 좀더 간략시 표현 가능
<div>
  {() => {
    if (x === 1) return <div>하나</div>;
    if (x === 2) return <div>둘이다</div>;
    if (x === 3) return <div>셋이다</div>;
  }()}
  // {(() => {함수의 내용})()}
  // 화살표함수는 this, argument, super 개념이 없는 익명함수
</div>
  • 스타일 설정은 항목은 카멜케이스 값은 ‘‘안에 텍스트로 작성
class App extends Component {
  render() {
    const style = {
      backgroundColor: "black",
      padding: "16px",
      color: "white",
      fontSize: "36px",
    };
    return <div style={style}>안녕하세요!</div>;
  }
}

export default App;
  • 주석은 멀티라인을 중괄호로 감싸거나 태그사이에 // 넣기
class App extends Component {
  render() {
    return <div className="App">리액트</div>;
  }
}
  • 클래스명은 <className = ““>형태로 작성
class App extends Component {
  render() {
    return (
      <div>
      {*/ 멀티라인 방식의 주석 */}
      <h1 //태그 사이 방식의 주석 >리액트</h1>
      </div>
    )
  }
}

(React) JSX 문법을 잘못 사용하고 있는 예제를 고르세요


JSX 문법을 잘못 사용하고 있는 예제를 고르세요

A.
const Hello = () => {
    return (
        <div>안녕하세요</div>
    )
}

B.
const Hello = () => {
    return (
        <div>안녕하세요</div>
        <div>반갑습니다</div>
    )
}


C.
const Hello = () => {
    const name = 'walli'
    return (
         <div>안녕하세요 {name} 입니다.</div>
    )
}

D.
const Hello = () => {
    return (
        [<div>안녕하세요</div>,<div>반갑습니다.</div>]
    )
}


정답 (B)

A : 하나의 JSX 표현식 -> 감싸는 태그 필요 X
B :   이상 엘리먼트 -> 감싸는 태그
C : 변수를 {} 안에 넣어줘서 옳은 문법
D : 배열의  요소는 각각 변수에 담길  있는 JSX 표현식

아래 화면을 출력하기 위한 코드 중 틀린 것은?


JSX 문법을 잘못 사용하고 있는 예제를 고르세요


A.
let langs = ["JavaScript", "HTML", "Python"];
  let viewLangs = () =>  {
    return langs.map((it) => {
      return <p>{it}</p>;
    });
  };

  return (
    <div>
      {viewLangs}
    </div>
  );

B.
let langs = ["JavaScript", "HTML", "Python"];

  let viewLangs = langs.map((it) => {
      return <p>{it}</p>;
    });

  return (
    <div>
      {viewLangs}
    </div>
  );

C.
let langs = ["JavaScript", "HTML", "Python"];

  return (
    <div>
       {langs.map((it) => {
        return <p>{it}</p>;
      })}
    </div>
  );

D.
let langs = ["JavaScript", "HTML", "Python"];
  return (
    <div>
      {langs.map((it) => (
        <p>{it}</p>
      ))}
    </div>
  );


정답 (A)

A :  viewLangs  화살표 함수 표현식으로 선언 -> 함수를 호출하는 연산자 ()  써야 작동
B : map 함수 호출 결과를 viewLangs 변수에  담음
C : 변수를 {} 안에 넣어줘서 옳은 문법 
중괄호를 사용하여 JavaScript를 내부에 표현해주었기 때문에 올바르게 작동합니다. 주의할 점은 중괄호를 쓰게 되면 JavaScript 코드로 인지하므로 C의 경우  return  존재해야 합니다. return  없다면 undefiend  반환하게 됩니다. 정리하자면 중괄호({})  묶으면 function () {} 같으며, 소괄호(()) 묶으면 () 안의 값이 return값이 됩니다.
D : C와 마찬가지로, ()  사용했기 때문에 () 안의 값이 return 값이 됩니다.

React 카테고리 내 다른 글 보러가기

댓글 남기기