unstable_addTransitionType - Fitur ini tersedia di rilis Eksperimental terbaru React

Fitur Eksperimental

API ini bersifat eksperimental dan belum tersedia dalam versi React yang stabil.

Anda dapat mencobanya dengan memperbarui package React ke versi eksperimental terbaru:

  • react@experimental
  • react-dom@experimental
  • eslint-plugin-react-hooks@experimental

Versi eksperimental React mungkin mengandung bug. Jangan menggunakannya dalam produksi.

unstable_addTransitionType memungkinkan Anda untuk menentukan penyebab dari suatu transisi.

startTransition(() => {
unstable_addTransitionType('my-transition-type');
setState(newState);
});

Referensi

addTransitionType

Parameter

  • type: Tipe transisi yang akan ditambahkan. Ini dapat berupa string apa pun.

Kembalian

addTransitionType tidak mengembalikan apa pun.

Caveats

  • Jika beberapa transisi digabungkan, semua Tipe Transisi akan dikumpulkan. Anda juga dapat menambahkan lebih dari satu tipe ke dalam sebuah Transisi.
  • Tipe Transisi diatur ulang setiap kali commit. Ini berarti fallback <Suspense> akan mengasosiasikan tipe setelah startTransition, namun menampilkan konten tidak demikian.

Penggunaan

Menambahkan penyebab transisi

Panggil addTransitionType di dalam startTransition untuk menunjukkan penyebab dari suatu transisi:

import { startTransition, unstable_addTransitionType } from 'react'; function Submit({action) { function handleClick() { startTransition(() => { unstable_addTransitionType('submit-click'); action(); }); } return <button onClick={handleClick}>Click me</button>; }

Saat Anda memanggil addTransitionType di dalam cakupan startTransition, React akan mengasosiasikan submit-click sebagai salah satu penyebab Transisi tersebut.

Saat ini, Tipe Transisi dapat digunakan untuk menyesuaikan animasi yang berbeda berdasarkan apa yang menyebabkan Transisi tersebut. Anda memiliki tiga cara berbeda yang dapat dipilih untuk menggunakannya:

Di masa mendatang, kami berencana untuk mendukung lebih banyak kasus penggunaan untuk menggunakan penyebab transisi.


Menyesuaikan animasi menggunakan tipe transisi tampilan browser

Ketika ViewTransition aktif dari sebuah transisi, React menambahkan semua Tipe Transisi sebagai tipe transisi tampilan browser ke elemen tersebut.

Ini memungkinkan Anda menyesuaikan animasi berbeda berdasarkan cakupan CSS:

function Component() {
return (
<ViewTransition>
<div>Hello</div>
</ViewTransition>
);
}

startTransition(() => {
unstable_addTransitionType('my-transition-type');
setShow(true);
});
:root:active-view-transition-type(my-transition-type) {
&::view-transition-...(...) {
...
}
}

Menyesuaikan animasi menggunakan Kelas View Transition

Anda dapat menyesuaikan animasi untuk ViewTransition yang diaktifkan berdasarkan tipe dengan meneruskan objek ke Kelas View Transition:

function Component() {
return (
<ViewTransition enter={{
'my-transition-type': 'my-transition-class',
}}>
<div>Hello</div>
</ViewTransition>
);
}

// ...
startTransition(() => {
unstable_addTransitionType('my-transition-type');
setState(newState);
});

Jika beberapa tipe cocok, maka mereka akan digabungkan. Jika tidak ada tipe yang cocok, maka entri khusus “default” yang digunakan. Jika ada tipe yang memiliki nilai “none”, maka itu yang akan menang dan ViewTransition dinonaktifkan (tidak diberikan nama).

Ini dapat dikombinasikan dengan prop enter/exit/update/layout/share untuk mencocokkan berdasarkan jenis pemicu dan Tipe Transisi.

<ViewTransition enter={{
'navigation-back': 'enter-right',
'navigation-forward': 'enter-left',
}}
exit={{
'navigation-back': 'exit-right',
'navigation-forward': 'exit-left',
}}>

Menyesuaikan animasi menggunakan event ViewTransition

Anda dapat secara imperatif menyesuaikan animasi untuk ViewTransition yang diaktifkan berdasarkan tipe menggunakan event View Transition:

<ViewTransition onUpdate={(inst, types) => {
if (types.includes('navigation-back')) {
...
} else if (types.includes('navigation-forward')) {
...
} else {
...
}
}}>

Ini memungkinkan Anda untuk memilih Animasi imperatif yang berbeda berdasarkan penyebabnya.


Troubleshooting

TODO