React 애플리케이션 개발 기초와 핵심 개념

개발 환경 구성

React 애플리케이션을 시작하기 위해 다음 명령어를 사용합니다:

npx create-react-app 프로젝트명
npx create-react-app 타입스크립트-앱 --template typescript

npx create-react-app은 React 공식 스캐폴딩 도구로, 임시 설치 후 프로젝트 초기화를 수행하며 전역 설치가 필요하지 않습니다.

애플리케이션 실행

yarn start
또는
npm start

JSX 개요

JSX(JavaScript XML)는 JavaScript 코드 내에서 HTML 구조를 작성할 수 있게 해주는 문법입니다.

주요 장점:

  • HTML과 유사한 문법으로 학습 곡선이 낮음
  • JavaScript의 프로그래밍 능력을 활용한 동적 HTML 생성

JSX 표현식

function AppComponent() {
  const handleClick = () => {
    console.log('클릭 이벤트 발생');
  };
  
  return (
    <div className="app-container" onClick={handleClick}>
      안녕하세요! {themeColor}
    </div>
  );
}

리스트 렌더링

const studentData = [
  { 이름: '홍길동', 나이: 20, 설명: '안녕하세요' },
  { 이름: '김철수', 나이: 22 }
];

return (
  <ul>
    {studentData.map(학생 => (
      <li key={학생.나이}>
        이름: {학생.이름}, 나이: {학생.나이}
      </li>
    ))}
  </ul>
);

조건부 렌더링

{isVisible ? <span>표시됨</span> : null}
{isValid && (
  <div>
    <span>유효한 내용</span>
    <h2>제목</h2>
  </div>
)}

동적 태그 생성

export default function createHeader(level) {
  return React.createElement('h' + level, null, '제목 텍스트');
}

{createHeader(3)}

스타일 적용

<span style={{color: "blue"}}>스타일 적용 텍스트</span>
<span className="highlight">CSS 클래스 적용</span>

Fragment 사용

<>
  <div onClick={handleAction}>
    <br/>
    <span className={isActive ? 'active' : ''}>스팬 요소</span>
  </div>
</>

컴포넌트 정의

함수형 컴포넌트

export default function MainHeader() {
  return <h1>메인 제목</h1>;
}

<MainHeader/>

클래스 컴포넌트

export default class ContentArea extends React.Component {
  render() {
    return <section>콘텐츠 영역</section>;
  }
}

이벤트 핸들링

export default class InteractiveComponent extends React.Component {
  handleClick = (event) => {
    event.preventDefault();
    console.log('이벤트 처리');
  }

  render() {
    return <a href="#" onClick={this.handleClick}>링크</a>;
  }
}

매개변수 전달

handleAction = (message) => {
  console.log(message);
}

render() {
  return <button onClick={() => this.handleAction('전달 메시지')}>
    실행 버튼
  </button>;
}

상태 관리

state = {
  사용자명: '관리자',
  카운트: 0
}

updateCount = () => {
  this.setState({
    카운트: this.state.카운트 + 1
  });
}

render() {
  return <button onClick={this.updateCount}>
    {this.state.카운트}
  </button>;
}

폼 처리

제어 컴포넌트

handleInputChange = (event) => {
  this.setState({
    입력값: event.target.value
  });
}

render() {
  return <input 
    type="text" 
    value={this.state.입력값} 
    onChange={this.handleInputChange} 
  />;
}

비제어 컴포넌트

inputRef = React.createRef();

render() {
  return (
    <input type="text" ref={this.inputRef} />
    <button onClick={() => console.log(this.inputRef.current.value)}>
      값 확인
    </button>
  );
}

컴포넌트 간 데이터 전달

interface ComponentProps {
  콘텐츠: string;
  제목?: string;
}

export default class DataComponent extends React.Component<ComponentProps> {
  render() {
    return <div>{this.props.콘텐츠}</div>;
  }
}

React Hooks

function ModernComponent() {
  const [사용자, set사용자] = useState({ 이름: '사용자' });
  
  useEffect(() => {
    console.log('컴포넌트 마운트됨');
  }, []);
  
  useEffect(() => {
    console.log('사용자 이름 변경됨');
  }, [사용자.이름]);

  return (
    <div onClick={() => set사용자({ 이름: '새 사용자' })}>
      {사용자.이름}
    </div>
  );
}

태그: React JSX 컴포넌트 상태관리 Hooks

10월 3일 04:59에 게시됨