Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 모던 자바스크립트 Deep Dive TIL
- 리팩토링 회고
- 개발자 특강
- Frontend Roadmap
- 머쓱이
- Vue3
- 프로그래머스 데브코스 프론트엔드 TIL
- 프로그래머스 데브코스
- react customHook 예시
- 모던 자바스크립트 Deep Dive
- 모던 javascript Deep Dive
- K_Digital Training
- 프로그래머스 K_Digital Training 프론트엔드
- useRef 지역 변수
- 모던 자바스크립트 딥다이브
- react 프로젝트 리팩토링
- 투포인터알고리즘 js
- 프로그래머스 K_Digital Training
- 인프런 자바스크립트 알고리즘 문제풀이
- 우테캠 회고록
- 백준 js
- frontend roadmap study
- 프로그래머스 데브코스 프론트엔드
- KDT 프로그래머스 데브코스 프론트엔드
- KDT 프로그래머스
- useEffect return
- Vue3 Router
- TypeScript 문법 소개
- 모던 자바스크립트 TIL
- 백준 node.js
Archives
- Today
- Total
프론트엔드 개발자의 기록 공간
[React] React 심화(3) 본문
❗❗ 데브코스 72일차 (11.9)
72일차에는 71일차에 학습한 TS를 이용하여 TodoList를 만드는 실습을 진행한다.
TodoList의 모든 파일의 코드를 다루면서 소개하기 보다는 특정 일부분만 코드와
주석으로 간략하게 설명할 예정이다.
✅ useToggle.tsx
사용자 정의 hook으로 todoList에서 완료, 미완료를 처리하는 토글 버튼의 기능을 정의한다.
import { useCallback, useState } from 'react'
//props의 타입 정의 return값 정의
const useToggle = (initialState: boolean): [boolean, typeof toggle] => {
const [state, setState] = useState(initialState)
const toggle = useCallback(() => setState((state) => !state), [])
//리턴값은 상태를 나타내는 state : boolean
// toggle 기능을 담당하는 toggle함수 : function
return [state, toggle]
}
export default useToggle
✅ Toggle.tsx
위의 정의한 사용자 정의 useToogle hook을 사용하여 toggle를 담당하는 컴포넌트 생성
import React from 'react'
import { ChangeEvent } from 'react'
import useToggle from '../hooks/useToggle'
interface Props {
// 옵셔널 체이닝 ? : props가 있어도 되고 없어도 된다.
on?: boolean
// onChange 함수의 매개변수가 ChangeEvent 타입의 props
onChange?(e: ChangeEvent<HTMLInputElement>): void
}
// props 정의 (...props는 on, onChage외의 props들을 의미)
const Toggle = ({ on = false, onChange, ...props }: Props) => {
const [checked, toggle] = useToggle(on)
// 이벤트 타입 정의
const handleChange = (e: ChangeEvent<HTMLInputElement>) => {
toggle()
onChange?.(e)
}
return (
<>
// props로 on, onChange 외의 props를 적용
// style에 대한 props일 수도 있고, 다른 함수일 수도 있다.
<div {...props}>
<input
type="checkbox"
onChange={handleChange}
checked={checked}
/>
</div>
</>
)
}
export default Toggle
React + TypeScript를 이용하여 (간단한) 컴포넌트를 만들기 위해서는 크게 두 가지를 신경 쓰면 되는 것 같다.
1. 상위 컴포넌트에서 받아오는 Props들의 타입 정의
2. 컴포넌트 내에서 사용하는 함수나 상태들의 타입을 정의
이를 통해 상위에서 잘못된 Props를 내려준다든지, 컴포넌트에서 잘못된 타입을 정의할 경우
컴파일 단계에서 오류를 알려주므로 런타임 환경에서 문제가 되는 것을 방지할 수 있다.
만약 동일한 interface를 여러 곳에서 사용할 경우 이 또한 모듈로 분리해서 import 해서 사용할 수 있다.
👨💻 이전에는 props의 타입을 잘 모르겠거나 이벤트의 타입을 잘 모를 경우에 그냥 any로 때려 박아서 사용하는 습관이 있었다. 지금 생각해 보면 그럴 거면 왜 TS를 사용했나 싶었다. 이 블로그에서는 아주 짧고 간략하게 작성했지만, Type Guard와 여러 이벤트 타입 (클릭 이벤트, DOM 이벤트 등등)을 해당 타입에 맞게 찾고 정의하는 시야를 기를 수 있었던 것 같다.
📖 학습한 내용
- TypeScript를 이용하여 TodoList 만들기
728x90
'프로그래머스 데브코스_FE > TIL' 카테고리의 다른 글
[React] React 심화(2) (0) | 2022.02.09 |
---|---|
[React] React 심화(1) (0) | 2022.02.08 |
중간 프로젝트!! (0) | 2022.02.07 |
[React] React(9) (0) | 2022.01.28 |
[React] React(8) (0) | 2022.01.28 |
Comments