본문 바로가기

카테고리 없음

[React] 기초문법 가이드

반응형

React는 Facebook에서 개발한 JavaScript 라이브러리로, 사용자 인터페이스(UI)를 구축하는 데 사용됩니다.

이 글에서는 React의 주요 개념과 문법에 대해 알아보겠습니다.


1. 컴포넌트 ( Components )

 

React 애플리케이션은 컴포넌트의 모음입니다. 컴포넌트는 UI의 독립적인 조작을 캡슐화하여, 재사용가능합니다. React의 컴포넌트는 함수형과 클래스형 두 가지로 나뉩니다.


함수형 컴포넌트 ( Functionnal Components )

함수형 컴포넌트는 단순한 JavaScript 함수로, 'props'를 받아서 React요소로 반환합니다.

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

 

클래스형 컴포넌트 ( Class Components)

 

 클래스형 컴포넌트는 'React.Components' 를 상속받는  ES6 클래스입니다.

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

2. JSX

JSX는  JavaScript 를 확장한 문법으로, HTML과 유사한 코드를 JavaScript  내에서 작성할 수 있게 합니다. JSX는 'React.createElement()' 함수를 호출하여  React요소를 생성합니다.

const element = <h1>Hello, world!</h1>;

3. Props

Props는 부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달할 때 사용됩니다. Props 는 읽기 전용이며, 자식 컴포넌트에서 변경할 수 없습니다.

function App() {
  return <Welcome name="Sara" />;
}

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

4. State

State는 컴포넌트 내에서 동적인 데이터를 다룰 때 사용됩니다. 클래스형 컴포넌트에서는 'this.state' 를 사용하며, 함수형 컴포넌트에서는 'useState' 훅을 사용합니다.

 

클래스형 컴포넌트에서의 State

class Clock extends React.Component {
  constructor(props) {
    super(props);
    this.state = { date: new Date() };
  }

  componentDidMount() {
    this.timerID = setInterval(() => this.tick(), 1000);
  }

  componentWillUnmount() {
    clearInterval(this.timerID);
  }

  tick() {
    this.setState({
      date: new Date()
    });
  }

  render() {
    return (
      <div>
        <h1>Hello, world!</h1>
        <h2>It is {this.state.date.toLocaleTimeString()}.</h2>
      </div>
    );
  }
}

 

함수형 컴포넌트에서의  State

import React, { useState, useEffect } from 'react';

function Clock() {
  const [date, setDate] = useState(new Date());

  useEffect(() => {
    const timerID = setInterval(() => tick(), 1000);
    return () => clearInterval(timerID);
  }, []);

  const tick = () => {
    setDate(new Date());
  };

  return (
    <div>
      <h1>Hello, world!</h1>
      <h2>It is {date.toLocaleTimeString()}.</h2>
    </div>
  );
}

5. 이벤트 처리 ( Event Handling )

React에서는 이벤트를 처리할 때 카멜표기법(camelCase)을 사용하며, 함수 참조를 이벤트 핸들러로 전달합니다.

function ActionButton() {
  function handleClick() {
    alert('Button clicked!');
  }

  return (
    <button onClick={handleClick}>
      Click me
    </button>
  );
}

6. 조건부 랜더링 (Conditional Rendering)

React에서는 조건에 따라 다른 요소를 렌더링할 수 있습니다.

function Greeting(props) {
  const isLoggedIn = props.isLoggedIn;
  if (isLoggedIn) {
    return <h1>Welcome back!</h1>;
  }
  return <h1>Please sign up.</h1>;
}

7. 리스트와 키 (List and Key)

리스트를 렌더링할 때 각 항목의 고유한 키를 제공해야 합니다.

function NumberList(props) {
  const numbers = props.numbers;
  const listItems = numbers.map((number) =>
    <li key={number.toString()}>
      {number}
    </li>
  );
  return (
    <ul>{listItems}</ul>
  );
}

8. 폼 (Forms)

React에서는 폼 요소는 보통 제어 컴포넌트로 다룹니다. 제어 컴포넌트는 폼의 상태를 컴포넌트의 state로 관리합니다.

class NameForm extends React.Component {
  constructor(props) {
    super(props);
    this.state = {value: ''};

    this.handleChange = this.handleChange.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
  }

  handleChange(event) {
    this.setState({value: event.target.value});
  }

  handleSubmit(event) {
    alert('A name was submitted: ' + this.state.value);
    event.preventDefault();
  }

  render() {
    return (
      <form onSubmit={this.handleSubmit}>
        <label>
          Name:
          <input type="text" value={this.state.value} onChange={this.handleChange} />
        </label>
        <input type="submit" value="Submit" />
      </form>
    );
  }
}

위 내용으로 React의 기본적인 문법을 정리했습니다. 

React를 이용해 더욱 복잡한 애플리케이션을 구축하려면 추가적인 개념들과 라이브러리(예: Redux, React Router  등)도 공부하는 것이 좋습니다. React의 강력한 기능과 유연한 문법을 활용하시면 멋진 UI를 만들 수 있을 것입니다. 

반응형