반응형
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
- 리팩터링2판테스트
- git commit merge
- awss3
- formik submitting not working
- file not found Error
- 시스템설계면접예시
- react
- 시스템설계방법
- Git commit 합치기
- gitsquash
- 리액트구글애널리틱스
- 시스템설계면접팁
- cypress React
- 헤드퍼스트전략패턴
- react-ga
- 시스템설계면접
- FirebaseAnalytics
- 가상면접2장
- cypressBDD
- 디자인패턴
- 가상면접3장
- git squash
- formik react-query submitting not working
- 전략패턴
- 시스템설계
- 리팩토링2판4장
- s3이미지다운로드됨
- 테스트코드책
- git commit 협업
- 가상면접으로대규모시스템
Archives
- Today
- Total
mingg IT
[React] React Clean Code 기법 본문
React에서 clean 코드를 작성하는 방법을 소개 하려고 한다.
1. Dialog 로직 분리하기
보통 우리가 dialog를 쓸 때
버튼을 만들고, useState를 만들고 이에 따라 dialog를 open 하고 닫는 코드를 사용한다.
(리팩토링 전)
Home.tsx
const Home: React.FunctionComponent<IHomeProps> = props => {
const [open, setOpen] = useState<boolean>(false);
const onClick = () => {
setOpen(true);
};
const onClose = () => {
setOpen(false);
};
return (
<div>
<div>Here is Home </div>
<Button color="primary" onClick={onClick}>
Button
</Button>
<Dialog open={open} maxWidth={"lg"}>
<DialogTitle id="homeDialogTitle">Title</DialogTitle>
<DialogContent>Content</DialogContent>
<DialogActions>
<Button onClick={onClose}>close</Button>
</DialogActions>
</Dialog>
</div>
);
};
보통 이런식으로 사용해왔다. 허나 보면 Home 컴포넌트에서 Dialog를 위해 필요한 open, setOpen 같은 state가 있다.
이럴 필요가 없다.
Home.tsx
interface IHomeProps {}
const Home: React.FunctionComponent<IHomeProps> = props => {
return (
<div>
<div>Here is Home </div>
<HomeDialog />
<div>End</div>
</div>
);
};
HomeDialog.tsx
import React, { useState } from "react";
import {
Button,
Dialog,
DialogActions,
DialogContent,
DialogTitle,
} from "@material-ui/core";
interface IHomeDialogProps {}
const HomeDialog: React.FunctionComponent<IHomeDialogProps> = props => {
const [open, setOpen] = useState<boolean>(false);
const onClick = () => {
setOpen(true);
};
const onClose = () => {
setOpen(false);
};
return (
<>
<Button color="primary" onClick={onClick}>
Button
</Button>
<Dialog open={open} maxWidth={"lg"}>
<DialogTitle id="homeDialogTitle">Title</DialogTitle>
<DialogContent>Content</DialogContent>
<DialogActions>
<Button onClick={onClose}>close</Button>
</DialogActions>
</Dialog>
</>
);
};
export default HomeDialog;
이런식으로 사용하면된다.
Dialog에 필요한 컴포넌트를 전부 빼고, 버튼 또한 뺀다.
dialog자체가 position : absolute기 때문에
이런식으로 구현하게 되면 컴포넌트에서 필요한 비지니스 로직을 훨씬 편하게 확인할 수 있음.
'FrontEnd' 카테고리의 다른 글
[StoryBook] React+ StoryBook 사용 예시 (0) | 2022.08.15 |
---|---|
[StoryBook] Cannot read properties of undefined(reading 'current') 에러 해결 (0) | 2022.08.15 |
[Babel] Plugins 플러그인 제작하기 (0) | 2022.05.31 |
[Babel] Babel 예제로 공부하기(babel/cli, babel-loader) (0) | 2022.05.28 |
[JavaScript] Promise 와 Async Await (0) | 2022.05.13 |
Comments