Terakhir diperbaharui: Oct 24, 2020
Refactoring
Code Refactoring atau Refactoring adalah proses menata ulang code.
Tujuan dari refactoring bermacam - macam seperti membuat code lebih readable, meningkatkan performa dari sebuah aplikasi dll.
Refactoring sendiri juga banyak bentuknya, mulai dari menata ulang file dan folder dalam sebuah project, menghapus dead code, menghapus duplicate code, sampai menulis ulang sebagian besar code yang sudah ditulis karena berganti framework dll.
Refactoring yang akan kita lakukan adalah memisahkan component termasuk styled component dari page ke component tersendiri agar code pada setiap page tidak terlalu panjang sehingga memudahkan proses development selanjutnya.
Menata Ulang Component
Kita akan gunakan metode pembagian component seperti berikut:
- Component penyusun page yang bersifat khusus untuk page tersebut kita tempatkan di folder components
- Semua single styled component seperti Container dan Button yang dipakai oleh component lain kita tempatkan di components/ui
- Sedangkan multiple component seperti Header dan Footer yang dipakai di dalam layout kita tempatkan di components/shared
Mungkin sedikit membingungkan karena terlalu banyak pembagian jenis component, tapi keuntungan menggunakan metode pembagian seperti ini adalah akan mempermudah kita mengelola setiap component.
Metode pembagian jenis component seperti ini tidaklah baku, kita bebas berkreasi asalkan tetap mudah dipahami
Home page
➡️ Kita pisahkan component NotesList dari Home page ke file components/NotesList.js.
1import styled from 'styled-components';23const NotesList = styled.div`4567891011`;1213export default NotesList;
➡️ Kemudian pindahkan styled component Container dan Button.
src/components/ui/Container
1import styled from 'styled-components';23const Container = styled.div`456789`;1011export default Container;
src/components/ui/Button
1import styled from 'styled-components';23const Button = styled.button`4567891011`;1213export default Button;
➡️ Edit Home page
src/pages/Home.js
1import React from 'react';2import PageLayout from '../layouts/PageLayout';3import NotesList from '../components/NotesList';4import Container from '../components/ui/Container';5import Button from '../components/ui/Button';67const HomePage = () => {8 return (9 <PageLayout>10 <Container>11 <Button>Add New Note</Button>12 <h1>All Notes</h1>13 <NotesList>Notes List</NotesList>14 </Container>15 </PageLayout>16 );17};1819export default HomePage;
Struktur folder akhir
1dinotes-app2 |--node_modules3 |--public4 |--src5 |--components6 |--shared7 |--Footer.js8 |--Header.js9 |--ui10 |--Button.js11 |--Container.js12 |--NotesList.js13 ...
Add & Edit Page
➡️ Pindah styled component Form.
src/components/ui/Forms
1import styled from 'styled-components';23const Form = styled.form`45678`;910const FormGroup = styled.div`111213`;1415const Label = styled.label`161718`;1920const Input = styled.input`212223`;2425const TextArea = styled.textarea`26272829`;3031export { Form, FormGroup, Label, Input, TextArea };
➡️ Pindah component AddNoteForm ke file tersendiri.
src/components/AddNoteForm.js
1import React from 'react';2import { Form, FormGroup, Label, Input, TextArea } from '../components/ui/Form';3import Button from '../ui/Button';45const AddNoteForm = () => {6 return (7 <Form>8 <FormGroup>9 <Label>Title</Label>10 <Input type="text" name="title" />11 </FormGroup>12 <FormGroup>13 <Label>Note</Label>14 <TextArea name="note" rows="12" />15 </FormGroup>16 <FormGroup>17 <Button type="submit">Add</Button>18 </FormGroup>19 </Form>20 );21};2223export default AddNoteForm;
➡️ Update Add Page.
src/pages/Add.js
1import React from 'react';2import PageLayout from '../layouts/PageLayout';3import AddNoteForm from '../components/AddNoteForm';4import Container from '../components/ui/Container';56const AddPage = () => {7 return (8 <PageLayout>9 <Container>10 <h2>Add New Note</h2>11 <AddNoteForm />12 </Container>13 </PageLayout>14 );15};1617export default AddPage;
➡️ Pindah component EditNoteForm ke file tersendiri.
src/components/EditNoteForm.js
1import React from 'react';2import { Form, FormGroup, Label, Input, TextArea } from './ui/Form';3import Button from './ui/Button';45const EditNoteForm = () => {6 return (7 <Form>8 <FormGroup>9 <Label>Title</Label>10 <Input type="text" name="title" />11 </FormGroup>12 <FormGroup>13 <Label>Note</Label>14 <TextArea name="note" rows="12" />15 </FormGroup>16 <FormGroup>17 <Button type="submit">Add</Button>18 <Button>Delete</Button>19 </FormGroup>20 </Form>21 );22};2324export default EditNoteForm;
➡️ Update Edit Page.
src/pages/Edit.js
1import React from 'react';2import PageLayout from '../layouts/PageLayout';3import EditNoteForm from '../components/EditNoteForm';4import Container from '../components/ui/Container';56const EditPage = () => {7 return (8 <PageLayout>9 <Container>10 <h1>Edit Note</h1>11 <EditNoteForm />12 </Container>13 </PageLayout>14 );15};1617export default EditPage;
✅ Struktur folder akhir:
1dinotes-app2 |--node_modules3 |--public4 |--src5 |--components6 |--shared7 |--Footer.js8 |--Header.js9 |--ui10 |--Button.js11 |--Container.js12 |--Form.js13 |--AddNoteForm.js14 |--EditNoteForm.js15 |--NotesList.js16 ...
Selanjutnya kita akan menambahkan data dan event handling.