Thursday

19-06-2025 Vol 19

React Post Creation Form: Building the Frontend for Your Content Management System

React Post Creation Form: Membangun Frontend untuk Sistem Manajemen Konten Anda

Dalam era digital ini, konten adalah raja. Namun, menciptakan konten yang menarik secara konsisten membutuhkan alat yang tepat. Salah satu alat penting untuk setiap sistem manajemen konten (CMS) adalah formulir pembuatan posting yang efisien dan mudah digunakan. Dalam posting blog ini, kita akan menyelami cara membangun frontend yang kuat untuk formulir pembuatan posting menggunakan React, perpustakaan JavaScript yang populer untuk membangun antarmuka pengguna.

Mengapa React untuk Formulir Pembuatan Post?

React menawarkan beberapa keuntungan untuk membangun formulir pembuatan posting:

  1. Komponen: React memungkinkan Anda untuk memecah formulir menjadi komponen yang lebih kecil dan dapat digunakan kembali, sehingga membuat kode Anda lebih modular dan mudah dikelola.
  2. DOM Virtual: DOM virtual React memungkinkan pembaruan antarmuka pengguna yang efisien, yang menghasilkan pengalaman pengguna yang lebih lancar.
  3. Ekosistem: React memiliki ekosistem yang besar dan berkembang dengan banyak perpustakaan dan alat yang tersedia untuk membantu Anda membangun formulir yang kompleks.
  4. Deklaratif: React memungkinkan Anda untuk menulis kode deklaratif, yang berarti Anda menggambarkan apa yang ingin Anda lihat, dan React akan menangani pembaruan DOM yang diperlukan.

Kerangka Posting Blog

  1. Pendahuluan:
    • Pentingnya formulir pembuatan posting yang efisien dalam CMS.
    • Mengapa React adalah pilihan yang baik untuk membangun formulir ini.
    • Tinjauan tentang apa yang akan dibahas dalam postingan ini.
  2. Persiapan: Mengatur Lingkungan Pengembangan Anda:
    • Menginstal Node.js dan npm atau Yarn.
    • Membuat aplikasi React baru menggunakan Create React App.
    • Menginstal dependensi yang diperlukan (misalnya, Axios untuk permintaan API).
  3. Merencanakan Formulir: Elemen dan Struktur:
    • Mengidentifikasi bidang formulir yang diperlukan (judul, konten, kategori, tag, gambar unggulan, dll.).
    • Merancang tata letak formulir menggunakan wireframe atau sketsa.
    • Mempertimbangkan validasi dan penanganan kesalahan.
  4. Membangun Komponen Formulir React:
    • Membuat komponen formulir dasar.
    • Menambahkan bidang input (teks, textarea, select, checkbox, radio).
    • Mengelola status formulir menggunakan React hooks (useState).
    • Menangani perubahan input dan memperbarui status.
  5. Integrasi Editor Teks Kaya:
    • Memilih editor teks kaya yang cocok (misalnya, TinyMCE, Quill, Draft.js).
    • Menginstal dan mengkonfigurasi editor teks kaya dalam komponen React Anda.
    • Menangani input dan output editor teks kaya.
  6. Unggahan dan Manajemen Gambar:
    • Menerapkan fungsi unggah gambar.
    • Menampilkan pratinjau gambar.
    • Integrasi dengan layanan penyimpanan cloud (misalnya, AWS S3, Cloudinary).
  7. Validasi Formulir:
    • Menerapkan validasi sisi klien (misalnya, menggunakan perpustakaan seperti Formik atau Yup).
    • Menampilkan pesan kesalahan kepada pengguna.
    • Menangani kesalahan validasi.
  8. Mengirimkan Formulir ke Backend:
    • Membuat permintaan API ke backend Anda.
    • Menangani respons dari backend (sukses atau kesalahan).
    • Menampilkan pesan umpan balik kepada pengguna.
  9. Penanganan Kesalahan:
    • Menangani kesalahan jaringan.
    • Menangani kesalahan backend.
    • Menampilkan pesan kesalahan yang jelas dan informatif kepada pengguna.
  10. Peningkatan UX:
    • Menambahkan umpan balik visual (misalnya, indikator pemuatan).
    • Menerapkan validasi real-time.
    • Menggunakan alat bantu untuk aksesibilitas.
  11. Praktik Terbaik SEO:
    • Mengoptimalkan formulir untuk SEO (misalnya, penggunaan kata kunci dalam judul dan konten).
    • Memastikan aksesibilitas.
    • Meningkatkan kecepatan pemuatan halaman.
  12. Kesimpulan:
    • Ringkasan poin-poin penting.
    • Pemikiran akhir tentang membangun formulir pembuatan posting yang efisien dengan React.
    • Langkah selanjutnya untuk meningkatkan formulir Anda.

1. Pendahuluan

Sistem manajemen konten (CMS) adalah tulang punggung dari banyak situs web dan aplikasi web. Mereka memungkinkan pengguna untuk membuat, mengelola, dan menerbitkan konten dengan mudah. Salah satu komponen penting dari CMS adalah formulir pembuatan posting, yang memungkinkan pengguna untuk menambahkan konten baru ke situs web mereka. Formulir pembuatan posting yang dirancang dengan baik harus intuitif, efisien, dan kaya fitur. Hal ini akan membantu pengguna untuk membuat konten berkualitas tinggi dengan cepat dan mudah.

React, dengan arsitektur berbasis komponen dan DOM virtual, adalah pilihan ideal untuk membangun frontend yang kuat untuk formulir pembuatan posting. Artikel ini akan memandu Anda melalui proses langkah demi langkah membangun formulir pembuatan posting React yang lengkap, meliputi setiap aspek dari penyiapan lingkungan hingga peningkatan UX.

2. Persiapan: Menyiapkan Lingkungan Pengembangan Anda

Sebelum kita mulai membangun formulir, kita perlu menyiapkan lingkungan pengembangan kita. Ini melibatkan menginstal Node.js dan npm (atau Yarn), membuat aplikasi React baru, dan menginstal dependensi yang diperlukan.

2.1. Menginstal Node.js dan npm/Yarn

Node.js adalah lingkungan runtime JavaScript yang memungkinkan kita menjalankan JavaScript di sisi server. npm (Node Package Manager) adalah manajer paket yang disertakan dengan Node.js. Yarn adalah manajer paket alternatif yang menawarkan peningkatan kinerja.

Anda dapat mengunduh dan menginstal Node.js dari situs web resminya: https://nodejs.org/

Setelah Node.js diinstal, npm akan tersedia secara otomatis. Jika Anda ingin menggunakan Yarn, Anda dapat menginstalnya secara global dengan perintah berikut:

npm install -g yarn

2.2. Membuat Aplikasi React Baru dengan Create React App

Create React App adalah cara yang nyaman untuk memulai proyek React baru dengan konfigurasi yang telah diatur sebelumnya. Untuk membuat aplikasi React baru, jalankan perintah berikut di terminal Anda:

npx create-react-app my-post-creation-form

Ganti my-post-creation-form dengan nama yang Anda inginkan untuk aplikasi Anda. Setelah aplikasi dibuat, masuk ke direktori proyek:

cd my-post-creation-form

2.3. Menginstal Dependensi yang Diperlukan

Kita akan membutuhkan beberapa dependensi untuk membangun formulir pembuatan posting kita. Salah satunya adalah Axios, perpustakaan JavaScript berbasis promise untuk membuat permintaan HTTP. Instal Axios dengan perintah berikut:

npm install axios

Atau, jika Anda menggunakan Yarn:

yarn add axios

Kita juga akan membutuhkan library rich text editor. Kita akan membahasnya di bagian selanjutnya.

3. Merencanakan Formulir: Elemen dan Struktur

Sebelum kita mulai menulis kode, penting untuk merencanakan elemen dan struktur formulir kita. Ini akan membantu kita untuk tetap terorganisir dan memastikan bahwa formulir kita memenuhi semua kebutuhan kita.

3.1. Mengidentifikasi Bidang Formulir yang Diperlukan

Bidang formulir yang diperlukan akan tergantung pada jenis konten yang ingin Anda buat. Namun, beberapa bidang umum termasuk:

  • Judul: Judul posting.
  • Konten: Isi posting.
  • Kategori: Kategori tempat posting tersebut berada.
  • Tag: Kata kunci yang terkait dengan posting.
  • Gambar Unggulan: Gambar yang ditampilkan di bagian atas posting.
  • Status: Status posting (draf, diterbitkan, dll.).

3.2. Merancang Tata Letak Formulir

Tata letak formulir harus intuitif dan mudah digunakan. Pertimbangkan untuk menggunakan kisi atau sistem tata letak fleksibel untuk mengatur bidang formulir. Anda juga dapat menggunakan tab atau bagian untuk mengelompokkan bidang terkait.

3.3. Mempertimbangkan Validasi dan Penanganan Kesalahan

Validasi formulir penting untuk memastikan bahwa data yang dikirimkan valid dan lengkap. Kita perlu menerapkan validasi sisi klien dan sisi server. Validasi sisi klien memberikan umpan balik instan kepada pengguna, sedangkan validasi sisi server memastikan bahwa data disimpan dengan aman dan benar.

4. Membangun Komponen Formulir React

Sekarang kita memiliki rencana, mari mulai membangun komponen formulir React kita. Kita akan mulai dengan komponen formulir dasar dan kemudian menambahkan bidang input, penanganan status, dan validasi.

4.1. Membuat Komponen Formulir Dasar

Buat file baru bernama PostForm.js di direktori src aplikasi Anda. Tambahkan kode berikut ke file tersebut:

import React from 'react';

  function PostForm() {
    return (
      <form>
        <h2>Buat Posting Baru</h2>
      </form>
    );
  }

  export default PostForm;
  

Ini adalah komponen formulir dasar yang akan kita gunakan sebagai dasar untuk formulir pembuatan posting kita.

Sekarang, import dan gunakan komponen PostForm ini di komponen App.js Anda:

import React from 'react';
  import PostForm from './PostForm';

  function App() {
    return (
      <div className="App">
        <PostForm />
      </div>
    );
  }

  export default App;
  

4.2. Menambahkan Bidang Input

Mari kita tambahkan beberapa bidang input ke formulir kita. Kita akan menambahkan bidang untuk judul, konten, kategori, dan tag.

import React, { useState } from 'react';

  function PostForm() {
    const [title, setTitle] = useState('');
    const [content, setContent] = useState('');
    const [category, setCategory] = useState('');
    const [tags, setTags] = useState('');

    return (
      <form>
        <h2>Buat Posting Baru</h2>

        <label htmlFor="title">Judul:</label>
        <input
          type="text"
          id="title"
          value={title}
          onChange={(e) => setTitle(e.target.value)}
        />

        <label htmlFor="content">Konten:</label>
        <textarea
          id="content"
          value={content}
          onChange={(e) => setContent(e.target.value)}
        />

        <label htmlFor="category">Kategori:</label>
        <select
          id="category"
          value={category}
          onChange={(e) => setCategory(e.target.value)}
        >
          <option value="">Pilih Kategori</option>
          <option value="programming">Pemrograman</option>
          <option value="design">Desain</option>
          <option value="marketing">Pemasaran</option>
        </select>

        <label htmlFor="tags">Tag:</label>
        <input
          type="text"
          id="tags"
          value={tags}
          onChange={(e) => setTags(e.target.value)}
        />
      </form>
    );
  }

  export default PostForm;
  

Dalam kode ini, kita menggunakan hook useState untuk mengelola status setiap bidang input. Kita juga melampirkan fungsi onChange ke setiap bidang input yang memperbarui status saat pengguna mengetik.

4.3. Mengelola Status Formulir Menggunakan React Hooks (useState)

Seperti yang kita lihat di bagian sebelumnya, hook useState memungkinkan kita untuk mengelola status formulir kita secara efektif. Setiap kali input berubah, fungsi onChange akan memperbarui state yang sesuai, yang kemudian akan menyebabkan React memperbarui DOM.

5. Integrasi Editor Teks Kaya

Bidang konten adalah bagian terpenting dari formulir pembuatan posting. Untuk memberikan pengalaman menulis yang lebih baik, kita dapat mengintegrasikan editor teks kaya ke dalam formulir kita. Ada banyak editor teks kaya yang tersedia, seperti TinyMCE, Quill, dan Draft.js. Mari kita lihat cara mengintegrasikan TinyMCE.

5.1. Memilih Editor Teks Kaya yang Cocok (TinyMCE)

TinyMCE adalah editor teks kaya yang populer dan gratis yang menawarkan berbagai fitur, seperti pemformatan teks, penyisipan gambar, dan penyisipan video. Ini mudah diintegrasikan ke dalam aplikasi React.

5.2. Menginstal dan Mengkonfigurasi Editor Teks Kaya di Komponen React Anda

Untuk menginstal TinyMCE, jalankan perintah berikut:

npm install @tinymce/tinymce-react

Atau, jika Anda menggunakan Yarn:

yarn add @tinymce/tinymce-react

Sekarang, import dan gunakan komponen Editor di komponen PostForm.js Anda:

import React, { useState } from 'react';
  import { Editor } from '@tinymce/tinymce-react';

  function PostForm() {
    const [title, setTitle] = useState('');
    const [content, setContent] = useState('');
    const [category, setCategory] = useState('');
    const [tags, setTags] = useState('');

    const handleEditorChange = (content, editor) => {
      setContent(content);
    };

    return (
      <form>
        <h2>Buat Posting Baru</h2>

        <label htmlFor="title">Judul:</label>
        <input
          type="text"
          id="title"
          value={title}
          onChange={(e) => setTitle(e.target.value)}
        />

        <label htmlFor="content">Konten:</label>
        <Editor
          apiKey="YOUR_TINYMCE_API_KEY"
          value={content}
          onEditorChange={handleEditorChange}
          init={{
            height: 500,
            menubar: false,
            plugins: [
              'advlist autolink lists link image charmap print preview anchor',
              'searchreplace visualblocks code fullscreen',
              'insertdatetime media table paste code help wordcount'
            ],
            toolbar:
              'undo redo | formatselect | ' +
              'bold italic backcolor | alignleft aligncenter ' +
              'alignright alignjustify | bullist numlist outdent indent | ' +
              'removeformat | help'
          }}
        />

        <label htmlFor="category">Kategori:</label>
        <select
          id="category"
          value={category}
          onChange={(e) => setCategory(e.target.value)}
        >
          <option value="">Pilih Kategori</option>
          <option value="programming">Pemrograman</option>
          <option value="design">Desain</option>
          <option value="marketing">Pemasaran</option>
        </select>

        <label htmlFor="tags">Tag:</label>
        <input
          type="text"
          id="tags"
          value={tags}
          onChange={(e) => setTags(e.target.value)}
        />
      </form>
    );
  }

  export default PostForm;
  

Pastikan untuk mengganti YOUR_TINYMCE_API_KEY dengan kunci API TinyMCE Anda. Anda dapat memperoleh kunci API gratis dengan mendaftar di situs web TinyMCE.

5.3. Menangani Input dan Output Editor Teks Kaya

Komponen Editor memberikan properti onEditorChange yang memungkinkan kita untuk menangani perubahan konten. Dalam kode di atas, kita menggunakan fungsi handleEditorChange untuk memperbarui status konten saat pengguna mengetik di editor.

6. Unggahan dan Manajemen Gambar

Gambar adalah bagian penting dari banyak posting blog. Mari kita terapkan fungsi unggah gambar ke formulir kita.

6.1. Menerapkan Fungsi Unggah Gambar

Kita dapat menggunakan komponen input bertipe file untuk memungkinkan pengguna memilih gambar dari komputer mereka.

import React, { useState } from 'react';
  import { Editor } from '@tinymce/tinymce-react';

  function PostForm() {
    const [title, setTitle] = useState('');
    const [content, setContent] = useState('');
    const [category, setCategory] = useState('');
    const [tags, setTags] = useState('');
    const [image, setImage] = useState(null);

    const handleEditorChange = (content, editor) => {
      setContent(content);
    };

    const handleImageChange = (e) => {
      setImage(e.target.files[0]);
    };

    return (
      <form>
        <h2>Buat Posting Baru</h2>

        <label htmlFor="title">Judul:</label>
        <input
          type="text"
          id="title"
          value={title}
          onChange={(e) => setTitle(e.target.value)}
        />

        <label htmlFor="content">Konten:</label>
        <Editor
          apiKey="YOUR_TINYMCE_API_KEY"
          value={content}
          onEditorChange={handleEditorChange}
          init={{
            height: 500,
            menubar: false,
            plugins: [
              'advlist autolink lists link image charmap print preview anchor',
              'searchreplace visualblocks code fullscreen',
              'insertdatetime media table paste code help wordcount'
            ],
            toolbar:
              'undo redo | formatselect | ' +
              'bold italic backcolor | alignleft aligncenter ' +
              'alignright alignjustify | bullist numlist outdent indent | ' +
              'removeformat | help'
          }}
        />

        <label htmlFor="category">Kategori:</label>
        <select
          id="category"
          value={category}
          onChange={(e) => setCategory(e.target.value)}
        >
          <option value="">Pilih Kategori</option>
          <option value="programming">Pemrograman</option>
          <option value="design">Desain</option>
          <option value="marketing">Pemasaran</option>
        </select>

        <label htmlFor="tags">Tag:</label>
        <input
          type="text"
          id="tags"
          value={tags}
          onChange={(e) => setTags(e.target.value)}
        />

        <label htmlFor="image">Gambar Unggulan:</label>
        <input
          type="file"
          id="image"
          onChange={handleImageChange}
        />
      </form>
    );
  }

  export default PostForm;
  

Dalam kode ini, kita menambahkan bidang input bertipe file dan melampirkan fungsi onChange yang memperbarui status gambar saat pengguna memilih file.

6.2. Menampilkan Pratinjau Gambar

Untuk memberikan umpan balik kepada pengguna, kita dapat menampilkan pratinjau gambar yang dipilih. Kita dapat menggunakan tag img untuk menampilkan pratinjau.

import React, { useState } from 'react';
  import { Editor } from '@tinymce/tinymce-react';

  function PostForm() {
    const [title, setTitle] = useState('');
    const [content, setContent] = useState('');
    const [category, setCategory] = useState('');
    const [tags, setTags] = useState('');
    const [image, setImage] = useState(null);
    const [imagePreview, setImagePreview] = useState(null);

    const handleEditorChange = (content, editor) => {
      setContent(content);
    };

    const handleImageChange = (e) => {
      const file = e.target.files[0];
      setImage(file);
      setImagePreview(URL.createObjectURL(file));
    };

    return (
      <form>
        <h2>Buat Posting Baru</h2>

        <label htmlFor="title">Judul:</label>
        <input
          type="text"
          id="title"
          value={title}
          onChange={(e) => setTitle(e.target.value)}
        />

        <label htmlFor="content">Konten:</label>
        <Editor
          apiKey="YOUR_TINYMCE_API_KEY"
          value={content}
          onEditorChange={handleEditorChange}
          init={{
            height: 500,
            menubar: false,
            plugins: [
              'advlist autolink lists link image charmap print preview anchor',
              'searchreplace visualblocks code fullscreen',
              'insertdatetime media table paste code help wordcount'
            ],
            toolbar:
              'undo redo | formatselect | ' +
              'bold italic backcolor | alignleft aligncenter ' +
              'alignright alignjustify | bullist numlist outdent indent | ' +
              'removeformat | help'
          }}
        />

        <label htmlFor="category">Kategori:</label>
        <select
          id="category"
          value={category}
          onChange={(e) => setCategory(e.target.value)}
        >
          <option value="">Pilih Kategori</option>
          <option value="programming">Pemrograman</option>
          <option value="design">Desain</option>
          <option value="marketing">Pemasaran</option>
        </select>

        <label htmlFor="tags">Tag:</label>
        <input
          type="text"
          id="tags"
          value={tags}
          onChange={(e) => setTags(e.target.value)}
        />

        <label htmlFor="image">Gambar Unggulan:</label>
        <input
          type="file"
          id="image"
          onChange={handleImageChange}
        />

        {imagePreview && (
          <img src={imagePreview} alt="Pratinjau Gambar" style={{ maxWidth: '200px' }} />
        )}
      </form>
    );
  }

  export default PostForm;
  

Dalam kode ini, kita menambahkan status baru bernama imagePreview yang menyimpan URL pratinjau gambar. Fungsi handleImageChange membuat URL pratinjau menggunakan URL.createObjectURL dan menyetelnya ke status imagePreview. Kemudian, kita menampilkan gambar pratinjau menggunakan tag img.

6.3. Integrasi dengan Layanan Penyimpanan Cloud (AWS S3, Cloudinary)

Untuk menyimpan gambar yang diunggah, kita dapat mengintegrasikan dengan layanan penyimpanan cloud seperti AWS S3 atau Cloudinary. Layanan ini menyediakan cara yang aman dan terukur untuk menyimpan dan menyajikan gambar.

Proses integrasi akan berbeda tergantung pada layanan penyimpanan cloud yang Anda pilih. Namun, secara umum, Anda perlu:

  1. Mengonfigurasi akun Anda dengan layanan penyimpanan cloud.
  2. Menginstal pustaka klien yang diperlukan untuk layanan penyimpanan cloud di aplikasi React Anda.
  3. Membuat fungsi untuk mengunggah gambar ke layanan penyimpanan cloud.
  4. Menyimpan URL gambar di database Anda.

7. Validasi Formulir

Validasi formulir penting untuk memastikan bahwa data yang dikirimkan valid dan lengkap. Kita akan menerapkan validasi sisi klien untuk memberikan umpan balik instan kepada pengguna.

7.1. Menerapkan Validasi Sisi Klien (Formik atau Yup)

Formik dan Yup adalah pustaka yang populer untuk validasi formulir di React. Formik menyediakan alat untuk membangun formulir, menangani perubahan input, dan mengirimkan formulir. Yup adalah pustaka validasi skema yang dapat digunakan dengan Formik untuk menentukan aturan validasi untuk bidang formulir Anda.

Mari kita gunakan Formik dan Yup untuk menerapkan validasi sisi klien. Pertama, instal pustaka:

npm install formik yup

Atau, jika Anda menggunakan Yarn:

yarn add formik yup

Sekarang, perbarui komponen PostForm.js Anda untuk menggunakan Formik dan Yup:

import React, { useState } from 'react';
  import { Editor } from '@tinymce/tinymce-react';
  import { Formik, Form, Field, ErrorMessage } from 'formik';
  import * as Yup from 'yup';

  const validationSchema = Yup.object().shape({
    title: Yup.string().required('Judul diperlukan'),
    content: Yup.string().required('Konten diperlukan'),
    category: Yup.string().required('Kategori diperlukan'),
    tags: Yup.string(),
    image: Yup.mixed().nullable()
  });

  function PostForm() {
    const [imagePreview, setImagePreview] = useState(null);

    const handleImageChange = (setFieldValue, e) => {
      const file = e.target.files[0];
      setFieldValue('image', file);
      setImagePreview(URL.createObjectURL(file));
    };

    return (
      <Formik
        initialValues={{
          title: '',
          content: '',
          category: '',
          tags: '',
          image: null
        }}
        validationSchema={validationSchema}
        onSubmit={(values, { setSubmitting }) => {
          // Kirim formulir ke backend di sini
          console.log(values);
          setSubmitting(false);
        }}
      >
        {({ isSubmitting, setFieldValue }) => (
          <Form>
            <h2>Buat Posting Baru</h2>

            <label htmlFor="title">Judul:</label>
            <Field type="text" id="title" name="title" />
            <ErrorMessage name="title" component="div" className="error" />

            <label htmlFor="content">Konten:</label>
            <Editor
              apiKey="YOUR_TINYMCE_API_KEY"
              value={values.content}
              onEditorChange={(content, editor) => setFieldValue('content', content)}
              init={{
                height: 500,
                menubar: false,
                plugins: [
                  'advlist autolink lists link image charmap print preview anchor',
                  'searchreplace visualblocks code fullscreen',
                  'insertdatetime media table paste code help wordcount'
                ],
                toolbar:
                  'undo redo | formatselect | ' +
                  'bold italic backcolor | alignleft aligncenter ' +
                  'alignright alignjustify | bullist numlist outdent indent | ' +
                  'removeformat | help'
              }}
            />
            <ErrorMessage name="content" component="div" className="error" />

            <label htmlFor="category">Kategori:</label>
            <Field as="select" id="category" name="category">
              <option value="">Pilih Kategori</option>
              <option value="programming">Pemrograman</option>
              <option value="design">Desain</option>
              <option value="marketing">Pemasaran</option>
            </Field>
            <ErrorMessage name="category" component="div" className="error" />

            <label htmlFor="tags">Tag:</label>
            <Field type="text" id="tags" name="tags" />
            <ErrorMessage name="tags" component="div" className="error" />

            <label htmlFor="image">Gambar Unggulan:</label>
            <input
              type="file"
              id="image"
              name="image"
              onChange={(e) => handleImageChange(setFieldValue, e)}
            />
            <ErrorMessage name="image" component="div" className="error" />

            {imagePreview && (
              <img src={imagePreview} alt="Pratinjau Gambar" style={{ maxWidth: '200px' }} />
            )}

            <button type="submit" disabled={isSubmitting}>
              Kirim
            </button>
          </Form>
        )}
      </Formik>
    );
  }

  export default PostForm;
  

Dalam kode ini, kita menggunakan komponen Formik untuk mengelola status formulir dan menangani pengiriman. Kita juga menggunakan komponen Field untuk membuat bidang input dan komponen ErrorMessage untuk menampilkan pesan kesalahan.

Skema validasi didefinisikan menggunakan Yup. Kita menentukan aturan validasi untuk setiap bidang, seperti apakah bidang tersebut diperlukan atau tidak.

7.2. Menampilkan Pesan Kesalahan kepada Pengguna

Komponen ErrorMessage secara otomatis menampilkan pesan kesalahan yang sesuai dengan bidang yang divalidasi. Kita juga dapat menambahkan kelas CSS untuk menata gaya pesan kesalahan.

7.3. Menangani Kesalahan Validasi

Formik menangani kesalahan validasi secara otomatis. Jika ada kesalahan validasi, formulir tidak akan dikirimkan dan pesan kesalahan akan ditampilkan kepada pengguna.

8. Mengirimkan Formulir ke Backend

Setelah formulir divalidasi, kita dapat mengirimkannya ke backend.

8.1. Membuat Permintaan API ke Backend Anda

Kita akan menggunakan Axios untuk membuat permintaan API ke backend kita. Pertama, import Axios di komponen PostForm.js Anda:

import axios from 'axios';

Kemudian, perbarui fungsi onSubmit di komponen Formik Anda untuk membuat permintaan API:

onSubmit={(values, { setSubmitting }) => {
    const formData = new FormData();
    formData.append('title', values.title);
    formData.append('content', values.content);
    formData.append('category', values.category);
    formData.append('tags', values.tags);
    formData.append('image', values.image);

    axios.post('/api/posts', formData)
      .then(response => {
        console.log(response);
        setSubmitting(false);
      })
      .catch(error => {
        console.error(error);
        setSubmitting(false);
      });
  }}
  

Dalam kode ini, kita membuat objek FormData dan menambahkan nilai formulir ke dalamnya. Kita kemudian menggunakan Axios untuk membuat permintaan POST ke endpoint /api/posts.

8.2. Menangani Respons dari Backend (Sukses atau Kesalahan)

Setelah permintaan API berhasil, kita dapat menampilkan pesan sukses kepada pengguna. Jika permintaan API gagal, kita dapat menampilkan

omcoding

Leave a Reply

Your email address will not be published. Required fields are marked *