일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- BIND
- 타입스크립트
- js
- CSS
- const
- this
- 객체
- 리액트
- Number
- 데이터 타입
- VUE
- react
- 함수
- let
- 자바스크립트
- 뷰
- function
- Interface
- null
- var
- typescript
- ES6
- redux
- 컴포넌트
- 투두리스트
- 모던
- 라우터
- 스코프
- todolist
- 모던 자바스크립트
- Today
- Total
홍준혁
리액트 X 타입스크립트 사용해보기. 본문
타입 스크립트는 자바스크립트의 슈퍼셋이다.
타입 스크립트를 사용하면 개발자 입장에서 좋은 코드를 작성할 수 있게 된다.
(바보 같은 오류를 방지해준다.)
그래서 리액트에서 타입 스크립트를 사용해보자.
먼저
디렉터리를 만들고
CRA를 해준다.
이렇게 해주면 자동으로 타입 스크립트가 설정된 리액트가 프로젝트가 만들어진다.
기본적으로 만들어진 프로젝트에 App과 index를 남기고 다 지워도 무방하다.
-
이렇게 파일 구조를 생성해주자.
그다음에 APP에서 styled-components를 이용해서,
import styled, { createGlobalStyle } from 'styled-components';
styled와 createGlobalStyle을 선언해주자.
이렇게 되면 GlobalStyle컴포넌트가 전역 스타일을 관리하게 되는 것이고
RootDiv가 앞으로 만들 모든 컴포넌트들의 상위 스타 일드 컴포넌트가 될 것이다.
import React, { useState } from 'react';
import './TodoForm.scss';
interface TodoFormProps {}
const TodoForm = ({}: TodoFormProps) => {
const [value, setValue] = useState('');
const onSubmit = (event: React.FormEvent) => {
event.preventDefault();
};
const onChange = (event: React.ChangeEvent<HTMLInputElement>) => {
const { value } = event.target;
setValue(value);
};
return (
<>
<form onSubmit={onSubmit} className="todoForm">
<input
className="todoForm-input"
value={value}
onChange={onChange}
placeholder="무엇을 하실건가요?"
/>
<button className="todoForm-button">등록</button>
</form>
</>
);
};
export default TodoForm;
TodoForm은 input & submit을 관리하는 컴포넌트이다.
아직 contextAPI를 연동하여하는 작업을 하지 않았기 때문에 아무런 기능을 하지 못한다.
import React from 'react';
import TodoItem from 'components/TodoItem';
import './TodoList.scss';
interface TodoListProps {}
const TodoList = ({}: TodoListProps) => {
const todos = [
{
id: 1,
text: 'contextAPI배우기',
done: true,
},
{
id: 2,
text: 'TypeScript 배우기',
done: true,
},
{
id: 3,
text: 'TypeScript 와 Context API 함께 사용하기',
done: false,
},
];
return (
<>
<div className="todoList">
{todos.length === 0 ? (
<>오늘 할 일을 등록하세요!</>
) : (
todos.map((todo) => <TodoItem todo={todo} />)
)}
</div>
</>
);
};
export default TodoList;
TodoList는 TodoItem을 랜더링 해주는 컴포넌트이다.
이 컴포넌트도 마찬가지로 contextAPI를 연동하지 않았기 때문에 아무런 기능도 하지 못한다.
import React from 'react';
import './TodoItem.scss';
interface TodoItemProps {
todo: {
id: number;
text: string;
done: boolean;
};
}
const TodoItem = ({ todo }: TodoItemProps) => {
return (
<>
<div className="todoItem">
<div className="todoItem-index">{todo.id}</div>
<div className={`todoItem-text ${todo.done ? 'done' : ''}`}>
{todo.text}
</div>
<div className="todoItem-ItemBtn">
<span>삭제</span>
</div>
</div>
</>
);
};
export default TodoItem;
TodoItem은 TodoList의 랜더링 되는 범위이다.
사실 done을 처리하는 className부분은 classnames라는 라이브러리를 사용하여 조건부 랜더링을 해주면 편하긴 한데
이 프로젝트는 간단하게 하는 거라 그냥 백 틱을 써서 처리하기로 했다.
이렇게 간단한 템플릿을 완성했다. 이제 할 작업은 contextAPI를 연동하는 것인데, 하나의 상태 관리를 하는 방법이다.
다음 포스팅에서는 contextAPI를 연동을 해볼 것이다.
'React.js' 카테고리의 다른 글
React-Query로 무한스크롤 구현하기 (0) | 2022.06.15 |
---|---|
토큰 기반 인증, 효율적으로 관리하는 법 (1) | 2022.05.25 |
새로나온 React 18 빠르게 살펴보기. (0) | 2022.01.24 |
리액트 프로젝트 휴대폰 , 타블렛에서 확인하는 법 (4) | 2021.01.30 |
React-TypeScript (UseReducer 톺아보기) (0) | 2020.11.23 |