React with TS

旅人·2023년 4월 23일
0
post-thumbnail

공식 HP : https://create-react-app.dev/docs/adding-typescript/


React와 typescript를 함께 사용하여 프로젝트 만들 때

이미 만든 React 프로젝트에 typescript 적용할 때는 아래와 같이


Directory

tsx 파일로 관리되고 typescript 문법 사용 가능


Example Code

App.tsx

import React from "react";
import Greetings from "./Greetings";
import Message from "./Message";

const App: React.FC = () => {
  const onClick = (name: string) => {
    console.log(`${name} says hello`);
  };
  return (
    <>
      <Greetings
        name="Jack"
        // mark="~!!"
        // optional="Nice to see you"
        onClick={onClick}
      />
      <Message name="Jack" />
    </>
  );
};

export default App;

Greetings.tsx

import React from "react";

type GreetingsProps = {
  name: string;
  mark: string;
  optional?: string;
  onClick: (name: string) => void; 
};

function Greetings({ name, mark, optional, onClick }: GreetingsProps) {
  const handleClick = () => onClick(name);
  return (
    <div>
      Hello, {name} {mark}
      {optional && <p>{optional}</p>}
      <div>
        <button onClick={handleClick}>Click Me</button>
      </div>
    </div>
  );
}

Greetings.defaultProps = {
  mark: "!",
};

export default Greetings;

Message.tsx

import React, { useState } from "react";
interface Msg {
  content: string;
  showMsg: boolean;
}

type MsgProps = {
  name: string;
};

function Message({ name }: MsgProps) {
  const [message, setMessage] = useState<Msg>({
    content: "",
    showMsg: false,
  });

  const onChangeHandler = (e: React.ChangeEvent<HTMLInputElement>) => {
    setMessage({
      ...message,
      [e.target.name]: e.target.value,
    });
  };

  const onSubmitHandler = (e: React.FormEvent<HTMLFormElement>): void => {
    e.preventDefault();
    setMessage({
      ...message,
      showMsg: true,
    });
  };

  const onClickHandler = () => {
    setMessage({
      content: "",
      showMsg: false,
    });
  };
  return (
    <>
      <div>
        <form onSubmit={onSubmitHandler}>
          <input
            type="text"
            name="content"
            placeholder="message"
            onChange={onChangeHandler}
          />
          <button type="submit">추가</button>
        </form>
      </div>
      {message.showMsg && (
        <div>
          <p>
            {name} : {message.content}
          </p>
          <button onClick={onClickHandler}>삭제</button>
        </div>
      )}
    </>
  );
}

export default Message;

props, useState 상태관리, 이벤트 타입에도 설정이 가능

각 컴포넌트에 React.FC<Props 타입> 과 같이 컴포넌트/Props/children 타입을 설정이 가능하지만, 여러가지 단점도 존재한다고 함

아래 블로그 참고...


실행화면


참고 :

https://react.vlpt.us/using-typescript/02-ts-react-basic.html

https://ddeck.tistory.com/56

profile
一期一会

0개의 댓글