Cara untuk mengatasi keadaan Zustand anda.

DDD
Lepaskan: 2024-09-19 06:31:03
asal
1085 orang telah melayarinya

Dalam artikel ini, kami akan meneroka cara Zustand mendayakan penggantian keadaan dengan fungsi setState, memfokuskan pada ciri menarik: mengatasi keadaan tanpa bergabung. Kami akan menerangkan cara menggunakannya dengan kes ujian mudah.

How to override your Zustand state.

Memahami Penggabungan Negeri lwn Mengatasi Negeri

Sebelum melihat kod, adalah penting untuk memahami perbezaan antara mencantumkan dan mengatasi keadaan.

  • Keadaan Penggabungan: Secara lalai, apabila anda mengemas kini keadaan dalam Zustand (atau React), ia menggabungkan keadaan baharu dengan keadaan sedia ada. Hanya medan yang dikemas kini diubah, manakala negeri yang lain kekal utuh.

  • Keadaan Mengatasi: Sebaliknya, mengatasi keadaan menggantikan keseluruhan keadaan dengan objek baharu, membuang mana-mana medan yang terdapat dalam keadaan sebelumnya tetapi bukan sebahagian negeri baharu.

Bila Perlu Mengatasi Negeri

Terdapat situasi yang memerlukan penggantian keseluruhan negeri, contohnya:

  • Menetapkan semula keadaan selepas penyerahan borang.

  • Menggantikan keadaan sepenuhnya apabila memuatkan set data yang berbeza.

Kes Ujian untuk Mengatasi Negeri Zustand

Berikut ialah kes ujian ringkas daripada pangkalan kod Zustand yang menunjukkan cara untuk mengatasi keadaan menggunakan fungsi setState:

it('can set the store without merging', () => {
  const { setState, getState } = create<{ a: number } | { b: number }>(
    (_set) => ({
      a: 1,
    }),
  )

  // Should override the state instead of merging.
  setState({ b: 2 }, true)
  expect(getState()).toEqual({ b: 2 })
})
Salin selepas log masuk

Memecahkan Ujian

1. Mencipta Kedai Pertama, kedai Zustand dibuat dengan keadaan awal:

const { setState, getState } = create<{ a: number } | { b: number }>(
    (_set) => ({
      a: 1,
    }),
  )
Salin selepas log masuk

Keadaan awal ialah objek dengan satu sifat ditetapkan kepada 1. Fungsi cipta mengembalikan dua kaedah penting:

  • setState: Kaedah ini digunakan untuk mengemas kini keadaan kedai.

  • getState: Kaedah ini mendapatkan semula keadaan semasa kedai.

2. Mengatasi Keadaan Operasi utama di sini adalah untuk menggantikan keadaan semasa, { a: 1 }, dengan keadaan baharu sepenuhnya:

setState({ b: 2 }, true)
Salin selepas log masuk
  • Dengan menghantar bendera sebenar sebagai hujah kedua, Zustand tahu bahawa ia sepatutnya mengatasi keadaan, dan bukannya menggabungkan objek baharu { b: 2 } dengan yang sedia ada. Ini menggantikan sepenuhnya keadaan sebelumnya, jadi { a: 1 } dialih keluar dan keadaan baharu menjadi { b: 2 }.

3. Mengesahkan Penggantian Negeri Akhir sekali, ujian memastikan bahawa negeri telah diganti sepenuhnya:

expect(getState()).toEqual({ b: 2 })
Salin selepas log masuk

Jangkaan ialah selepas memanggil setState({ b: 2 }, benar), keadaan kedai hanya akan mengandungi { b: 2 } dan tidak lagi mengandungi { a: 1 }.

Cara Zustand Mengatasi Keadaan

Imej di bawah adalah daripada kod sumber Zustand yang menetapkan keadaan.

How to override your Zustand state.

Seperti yang anda lihat, jika bendera ganti wujud, nextState menjadi keadaan baharu.

(replace ?? (typeof nextState !== 'object' || nextState === null))
Salin selepas log masuk

Ini adalah cara yang bijak, jika penggantian adalah palsu, yang ia adalah secara lalai, (jenis nextState !== ‘objek’ || nextState === null)) keadaan diperiksa.

Kesimpulan

Zustand menawarkan cara mudah untuk mengurus keadaan dalam React, dan keupayaan untuk mengatasi keadaan sepenuhnya menggunakan setState dengan bendera override memberikan fleksibiliti tambahan. Sama ada anda ingin menetapkan semula borang, memuatkan data baharu atau mengosongkan nilai lama, ciri ini membolehkan anda mengawal sepenuhnya cara keadaan diurus dan dikemas kini dalam aplikasi anda.

Tentang kami:

Di Think Throo, kami berada dalam misi untuk mengajar konsep seni bina asas kod lanjutan yang digunakan dalam projek sumber terbuka.

10x kemahiran pengekodan anda dengan mempraktikkan konsep seni bina lanjutan dalam Next.js/React, pelajari amalan terbaik dan bina projek gred pengeluaran.

Kami adalah sumber terbuka — https://github.com/thinkthroo/thinkthroo (Beri kami bintang!)

Tingkatkan kemahiran pasukan anda dengan kursus lanjutan kami berdasarkan seni bina pangkalan kod. Hubungi kami di hello@thinkthroo.com untuk mengetahui lebih lanjut!

Rujukan:

  1. https://github.com/pmndrs/zustand/blob/v4.5.5/tests/basic.test.tsx#L471C13-L471C50

  2. https://github.com/pmndrs/zustand/tree/v4.5.5?tab=readme-ov-file#overwriting-state

Atas ialah kandungan terperinci Cara untuk mengatasi keadaan Zustand anda.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!