FrontEnd
[React] React Clean Code 기법
mingg123
2022. 7. 25. 00:05
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기 때문에
이런식으로 구현하게 되면 컴포넌트에서 필요한 비지니스 로직을 훨씬 편하게 확인할 수 있음.