React Academy · Pelajaran

Animasi Tata Letak & AnimatePresence

Animasikan perubahan tata letak secara otomatis dengan prop layout dan kelola pemasangan/pencopotan dengan AnimatePresence.

Pelajaran 4 dari 412 langkah

Animasi Tata Letak & AnimatePresence adalah pelajaran React Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar React Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus React Academy mencakup 4 pelajaran total.

Animasi Tata Letak

Tambahkan properti layout ke komponen motion dan Framer Motion akan otomatis menganimasikan setiap perubahan tata letak (ukuran, posisi) yang disebabkan oleh perubahan keadaan atau mutasi DOM — tidak diperlukan penempatan manual.

<motion.div layout style={{ width: isExpanded ? 300 : 150 }}>
  {/* Width animates smoothly when isExpanded changes */}
</motion.div>

Nilai Properti layout

Properti layout menerima true (semua tata letak), 'position' (hanya posisi), atau 'size' (hanya ukuran) untuk membatasi bagian yang dianimasikan.

<motion.div layout="position"> {/* only x/y positions animate */}
<motion.div layout="size">     {/* only width/height animate */}

layoutId untuk Transisi Elemen Bersama

Berikan dua elemen layoutId yang sama dan Framer Motion akan menganimasikan transisi di antara keduanya seolah-olah keduanya adalah elemen yang sama, bahkan jika berada di komponen yang berbeda.

// Thumbnail in list:
<motion.img layoutId={`photo-${id}`} src={src} className="thumbnail" />

// Full-screen view:
<motion.img layoutId={`photo-${id}`} src={src} className="fullscreen" />
// Framer Motion morphs one into the other automatically

AnimatePresence

AnimatePresence mengaktifkan animasi exit. Tanpanya, komponen yang dilepas dari pohon akan langsung menghilang. Bungkus render kondisional dengan komponen ini untuk menganimasikan pelepasan komponen.

import { AnimatePresence, motion } from 'framer-motion';

<AnimatePresence>
  {isVisible && (
    <motion.div
      key="notification"
      initial={{ opacity: 0, y: -20 }}
      animate={{ opacity: 1, y: 0 }}
      exit={{ opacity: 0, y: -20 }}
    />
  )}
</AnimatePresence>

Properti key Wajib Ada

AnimatePresence memerlukan setiap komponen anak memiliki key yang stabil. Tanpa key unik, React tidak dapat mendeteksi kapan elemen dilepas dari pohon dan kapan elemen diperbarui.

// Animating between pages:
<AnimatePresence mode="wait">
  <motion.div key={pathname} ... />
</AnimatePresence>

Mode AnimatePresence

mode mengatur cara elemen yang keluar dan masuk saling tumpang tindih. 'wait' menunda animasi masuk hingga animasi keluar selesai. 'sync' (bawaan) menjalankan keduanya secara bersamaan.

// Page transitions — wait for old page to exit:
<AnimatePresence mode="wait">
  <motion.main key={pathname} ... />
</AnimatePresence>

// Toast stack — new toasts appear while old ones exit:
<AnimatePresence mode="sync">
  {toasts.map(t => <motion.div key={t.id} ... />)}
</AnimatePresence>

Menganimasikan Daftar dengan layout

Gabungkan layout dan AnimatePresence untuk menganimasikan pengurutan ulang dan penghapusan item daftar.

<motion.ul>
  <AnimatePresence>
    {items.map(item => (
      <motion.li
        key={item.id}
        layout
        initial={{ opacity: 0, height: 0 }}
        animate={{ opacity: 1, height: 'auto' }}
        exit={{ opacity: 0, height: 0 }}
      >
        {item.name}
      </motion.li>
    ))}
  </AnimatePresence>
</motion.ul>

LayoutGroup

LayoutGroup mengoordinasikan animasi tata letak di berbagai komponen motion yang independen agar semuanya menganimasikan secara bersamaan sebagai satu grup.

import { LayoutGroup } from 'framer-motion';

<LayoutGroup>
  <Sidebar />
  <MainContent />
  {/* Both animate layout changes together */}
</LayoutGroup>

Memperbaiki Distorsi Tata Letak

Animasi tata letak dapat mendistorsi border, bayangan, dan border-radius. Gunakan properti layoutDependency atau koreksi skala CSS untuk memperbaiki artefak visual.

<motion.div
  layout
  style={{ borderRadius: 12 }}
  // Framer Motion auto-corrects border-radius during scale changes
/>

Pola Transisi Sumbu Bersama

Untuk langkah panduan atau tab, animasikan posisi X berdasarkan arah untuk menciptakan hubungan spasial yang bermakna di antara layar.

const variants = {
  enter: (dir: number) => ({ x: dir > 0 ? '100%' : '-100%', opacity: 0 }),
  center: { x: 0, opacity: 1 },
  exit: (dir: number) => ({ x: dir < 0 ? '100%' : '-100%', opacity: 0 }),
};

<AnimatePresence custom={direction} mode="wait">
  <motion.div
    key={step}
    custom={direction}
    variants={variants}
    initial="enter"
    animate="center"
    exit="exit"
  />
</AnimatePresence>

Pemeriksaan Singkat

Mode AnimatePresence mana yang menunda animasi masuk hingga animasi keluar selesai?

Ringkasan

layout menganimasikan perubahan ukuran/posisi secara otomatis. layoutId mengubah bentuk antara dua elemen di seluruh pohon. AnimatePresence mengaktifkan animasi keluar — selalu berikan properti key yang stabil kepada anak dan pilih mode='wait' untuk transisi halaman.

Gratis untuk memulai

Belajar React dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
88
Pelajaran
324

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Animasi Tata Letak & AnimatePresence” gratis?

Ya — teks lengkap “Animasi Tata Letak & AnimatePresence” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus React Academy, upgrade ke CoddyKit PRO. Kursus React Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Animasi Tata Letak & AnimatePresence”?

Animasikan perubahan tata letak secara otomatis dengan prop layout dan kelola pemasangan/pencopotan dengan AnimatePresence. Kamu berlatih React Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai React Academy?

Tidak diperlukan pengalaman sebelumnya. React Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Animasi Tata Letak & AnimatePresence” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran React Academy ini?

Ya. Setiap pelajaran React Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Komponen Motion & Animasi Dasar
  2. Varian untuk Animasi Terorkestrasi
  3. Animasi Gestur: Hover, Tap & Seret
  4. Animasi Tata Letak & AnimatePresence
← Kembali ke React Academy