Saya memiliki satu peredam untuk Klien, satu lagi untuk AppToolbar dan beberapa lainnya ...
Sekarang katakanlah saya membuat tindakan pengambilan untuk menghapus klien, dan jika gagal saya memiliki kode di peredam Klien yang seharusnya melakukan beberapa hal, tetapi saya juga ingin menampilkan beberapa kesalahan global di AppToolbar.
Tetapi klien dan pengurang AppToolbar tidak berbagi bagian yang sama dari status dan saya tidak dapat membuat tindakan baru di peredam.
Jadi bagaimana saya bisa menunjukkan kesalahan global? Terima kasih
UPDATE 1:
Saya lupa menyebutkan bahwa saya menggunakan este devstack
PEMBARUAN 2: Saya menandai jawaban Eric sebagai benar, tetapi saya harus mengatakan bahwa solusi yang saya gunakan di este lebih seperti kombinasi jawaban Eric dan Dan ... Anda hanya perlu menemukan yang paling cocok untuk Anda dalam kode Anda .. .
sumber
Jawaban:
Jika Anda ingin memiliki konsep "kesalahan global", Anda dapat membuat
errors
peredam, yang dapat mendengarkan tindakan addError, removeError, dll .... Kemudian, Anda dapat menghubungkan ke pohon status Redux Anda distate.errors
dan menampilkannya di mana saja sesuai.Ada beberapa cara untuk mendekati ini, tetapi gagasan umumnya adalah bahwa kesalahan / pesan global akan membutuhkan peredamnya sendiri untuk hidup sepenuhnya terpisah dari
<Clients />
/<AppToolbar />
. Tentu saja jika salah satu dari komponen ini membutuhkan akses,errors
Anda dapaterrors
menurunkannya sebagai penyangga di mana pun diperlukan.Pembaruan: Contoh Kode
Berikut adalah salah satu contoh tampilan jika Anda meneruskan "kesalahan global"
errors
ke tingkat teratas<App />
dan merendernya secara bersyarat (jika ada kesalahan). Menggunakan react-reduxconnect
untuk menghubungkan<App />
komponen Anda ke beberapa data.Dan sejauh menyangkut pencipta tindakan, itu akan mengirimkan ( redux-thunk ) kegagalan sukses sesuai dengan respons
Meskipun peredam Anda dapat dengan mudah mengelola serangkaian kesalahan, menambahkan / menghapus entri dengan tepat.
sumber
catch
fungsi yang dipanggil jikasomeHttpClient.get('/resources')
ataufetch('/resources')
yang saya gunakan dalam pengembalian kode saya500 Server Error
. Apakah Anda memiliki pemikiran di luar kepala Anda di mana saya mungkin membuat kesalahan? Pada dasarnya, apa yang saya lakukan adalahfetch
mengirimkan permintaan yang berakhir dengan diroutes
mana saya memanggil metode padamongoose
model saya untuk melakukan sesuatu yang sangat sederhana, seperti menambahkan teks atau menghapus teks dari DB.Jawaban Erik benar tetapi saya ingin menambahkan bahwa Anda tidak perlu melakukan tindakan terpisah untuk menambahkan kesalahan. Pendekatan alternatif adalah memiliki peredam yang menangani tindakan apa pun dengan suatu
error
bidang . Ini adalah masalah pilihan dan kesepakatan pribadi.Misalnya dari contoh Redux
real-world
yang memiliki penanganan error:sumber
error
muatan tindakan. Terima kasih Dan!Pendekatan yang saat ini saya ambil untuk beberapa kesalahan spesifik (validasi input pengguna) adalah meminta sub-reduksi saya membuat pengecualian, menangkapnya di peredam root saya, dan melampirkannya ke objek tindakan. Lalu saya memiliki redux-saga yang memeriksa objek tindakan untuk kesalahan dan memperbarui pohon status dengan data kesalahan dalam kasus itu.
Begitu:
Dan kemudian menambahkan kesalahan ke pohon status seperti yang dijelaskan Erik.
Saya menggunakannya dengan hemat, tetapi itu membuat saya tidak harus menduplikasi logika yang secara sah termasuk dalam peredam (sehingga dapat melindungi dirinya sendiri dari keadaan tidak valid).
sumber
tulis Middleware khusus untuk menangani semua kesalahan terkait api. Dalam hal ini kode Anda akan lebih bersih.
sumber
if
di peredamapa yang saya lakukan adalah saya memusatkan semua penanganan kesalahan yang berlaku pada setiap efek dasar
sumber
Anda dapat menggunakan klien HTTP axios. Ini sudah menerapkan fitur Interceptors. Anda bisa mencegat permintaan atau tanggapan sebelum ditangani saat itu atau menangkap.
https://github.com/mzabriskie/axios#interceptors
sumber