Nov 05, 2025Mesaj bırakın

Reducer'da iç içe geçmiş durum nasıl güncellenir?

Selam! Bir redüktör tedarikçisi olarak bana sık sık Redüktörde iç içe durumun nasıl güncelleneceği soruluyor. Bu biraz zor olabilecek bir konudur, ancak bir kez alıştığınızda çok daha kolay hale gelir. Bu blog yazısında, iç içe durum güncellemelerinin etkili bir şekilde nasıl ele alınacağına dair bazı ipuçları ve püf noktaları paylaşacağım.

Öncelikle iç içe durumun ne olduğunu anlayalım. Bir Redüktörde durum, başka nesneleri veya dizileri içeren bir nesne olabilir. Örneğin, bir kullanıcı profilini temsil eden bir durum nesneniz olabilir ve bu nesnenin içinde iletişim bilgileri, tercihler vb. için alt nesneler bulunabilir. Bu iç içe geçmiş yapının belirli bir bölümünü güncellemeniz gerektiğinde, Redux (veya indirgeyicileri kullanan diğer durum yönetimi kitaplıkları) değişmezliğe dayandığından, durumu doğrudan değiştirmemeye dikkat etmeniz gerekir.

Değişmezlik Neden Önemlidir

Redüktörlerle çalışırken değişmezlik çok önemlidir. Durumu güncellediğinizde, mevcut olanı değiştirmek yerine yeni bir durum nesnesi döndürmeniz gerekir. Bunun nedeni, indirgeyicilerin saf işlevler olması ve durumun değiştirilmesinin, bileşenlerin doğru şekilde yeniden oluşturulmaması gibi beklenmeyen davranışlara yol açabilmesidir.

Diyelim ki şöyle iç içe geçmiş bir duruma sahip basit bir redüktörünüz var:

Right Angle Planetary ReducerNema 34 Reduction Gearbox

const başlangıç ​​Durumu = { kullanıcı: { ad: 'John Doe', iletişim: { e-posta: 'johndoe@example.com', telefon: '123 - 456 - 7890' } } }; function userReducer(state = startupState, action) { switch (action.type) { case 'UPDATE_EMAIL': // Burada e-postanın dönüş durumunu nasıl güncelleyeceğimizi bulacağız; varsayılan: dönüş durumu; } }

Yuvalanmış Durum Güncelleniyor - Sığ Kopya

Yuvalanmış durumu güncellemenin bir yolu, durum nesnesinin yüzeysel bir kopyasını oluşturmaktır. Bunu başarmak için JavaScript'teki spread operatörünü kullanabilirsiniz. Yukarıdaki örnekte e-postayı güncelleyelim:

function userReducer(state = başlangıçDurum, eylem) { switch (eylem.tip) { case 'UPDATE_EMAIL': return { ...durum, kullanıcı: { ...durum.kullanıcı, iletişim: { ...durum.kullanıcı.contact, e-posta: eylem.payload } } }; varsayılan: dönüş durumu; } }

Bu kodda yeni bir durum nesnesi yaratıyoruz. Öncelikle mevcut durum nesnesini yayıyoruz. Daha sonra kullanıcı nesnesini yeni durumun içine yayıyoruz. Son olarak, iletişim nesnesini yayıyoruz ve e-posta özelliğini, eylemin yükündeki yeni değerle güncelliyoruz.

Daha Kolay Güncellemeler İçin Kütüphaneleri Kullanma

Eyaletinizde çok derin bir yuvalama varsa veya spread operatörü yaklaşımını çok hantal buluyorsanız immer gibi kütüphaneleri kullanabilirsiniz. Immer, durumu değiştiriyormuş gibi görünen bir kod yazmanıza olanak tanır, ancak aslında değişmez bir kopya oluşturur.

Aynı iç içe geçmiş durumu güncellemek için Immer'ı şu şekilde kullanabilirsiniz:

'Immer'dan ürün ithal etmek; const başlangıç ​​Durumu = { kullanıcı: { ad: 'John Doe', iletişim: { e-posta: 'johndoe@example.com', telefon: '123 - 456 - 7890' } } }; function userReducer(state = startupState, action) { return created(state, draft => { switch (action.type) { case 'UPDATE_EMAIL': draft.user.contact.email = action.payload; break; default: // Hiçbir şey yapmayın } }); }

Immer ile kod çok daha temiz ve sezgisel görünüyor. Esasen durumu değiştiriyormuşsunuz gibi kod yazıyorsunuz, ancak Immer sizin için durumun değişmez bir versiyonunu oluşturmaya özen gösteriyor.

Redüktör Tedarikinde Gerçek Dünya Uygulamaları

Bir redüktör tedarikçisi olarak, aşağıdakiler gibi çeşitli redüktör türleriyle ilgileniyoruz:Nema 23 Planet Şanzıman,Dik Açılı Planet Redüktör, VeNema 34 Redüksiyon Şanzımanı. Bu redüktörleri kontrol eden yazılımda uygun durum yönetimi esastır.

Örneğin Nema 23 Planet Dişli Kutusunun kontrol sisteminde durum, dişli kutusunun mevcut hızı, torku ve sıcaklığı hakkında bilgi içerebilir. Durumdaki sıcaklık okumasını güncellemeniz gerekiyorsa, değişmezlik ve iç içe geçmiş durum güncellemeleriyle aynı ilkeleri izlersiniz.

Dizileri Yuvalanmış Durumda İşleme

Yuvalanmış durumdaki dizilerin güncellenmesi de biraz zor olabilir. Diyelim ki bir dizi kullanıcıdan oluşan bir durumunuz var ve her kullanıcının iletişim bilgileri için iç içe geçmiş bir nesnesi var:

const başlangıç Durumu = { kullanıcılar: [ { kimlik: 1, ad: 'John Doe', iletişim: { e-posta: 'johndoe@example.com', telefon: '123 - 456 - 7890' } }, { kimlik: 2, ad: 'Jane Smith', iletişim: { e-posta: 'janesmith@example.com', telefon: '098 - 765 - 4321' } } ] }; function userListReducer(state = startupState, action) { switch (action.type) { case 'UPDATE_USER_EMAIL': return { ...state, kullanıcılar: state.users.map(user => { if (user.id === action.payload.userId) { return { ...user, contact: { ...user.contact, email: action.payload.newEmail } }; } return user; }) }; varsayılan: dönüş durumu; } }

Bu örnekte, kullanıcılar dizisi üzerinde yineleme yapmak için harita işlevini kullanıyoruz. Kullanıcının kimliği, eylemin veri yükündeki kullanıcı kimliğiyle eşleşiyorsa, güncellenen e-postayla yeni bir kullanıcı nesnesi oluştururuz. Aksi takdirde orijinal kullanıcı nesnesini döndürürüz.

Çözüm

Bir redüktörde yuvalanmış durumu güncellemek biraz zor olabilir, ancak doğru tekniklerle yönetilebilir hale gelir. İster sığ kopyalar için ister yayılma operatörünü kullanın, ister Immer gibi bir kitaplık kullanın, önemli olan değişmezliği korumaktır.

Bir redüktör tedarikçisi olarak, redüktörlerimizi kontrol eden yazılımda uygun durum yönetiminin önemini anlıyoruz. Aşağıdakiler gibi yüksek kaliteli redüktörler pazarındaysanızNema 23 Planet Şanzıman,Dik Açılı Planet Redüktör, veyaNema 34 Redüksiyon ŞanzımanıHerhangi bir sorunuz varsa veya özel gereksinimlerinizi tartışmak istiyorsanız bizimle iletişime geçmekten çekinmeyin. İhtiyaçlarınız için mükemmel redüktör çözümünü bulmanıza yardımcı olmak için buradayız.

Referanslar

  • Devlet yönetimine ilişkin resmi belgelere tepki verin
  • Her zaman kütüphane dokümantasyonu

Soruşturma göndermek

whatsapp

Telefon

E-posta

Sorgulama