2016-06-20 44 views
18

Bu bit ile sıkıştım ve ilerleyemiyorum - sanırım çözüm basit ama anlayamıyorum. Ben in veri şey bu olmazdı böylece indirgeyicide giriş eklemek çalışıyorum:Redux - Redüktördeki diziye nasıl giriş eklenir

state = { 
    entryId: { 
    entryName: ["something", "something2", "something3" /* and so on... */] 
    } 
}; 

Şimdiye kadar bu olsun en yakın olduğunu, ancak bunun yerine yeni benzersiz girdiyi ekleyerek, bu birini yerini alıyor Bu zaten saklanır. Yanlış yapıyorum

switch(type) { 
    case ADD_ENTRY: 
    return { 
     ...state, 
     [entryId]: { 
     ...state[entryId], 
     [entryName]: { 
      [uniqueEntry]: true 
     } 
     } 
    }; 
} 

konusunda fikrin: entryid entryName hatayı önlemek için, henüz var olmayan yerlerde Ayrıca ben boş durumuna bu maddeyi eklemek gerekiyor? Eğer entryName dizinin sonuna bir öğe eklemek için çalışıyorsanız

+0

Örnekle daha fazla içerik yazabilir misiniz? Örneğin, introser indirgeyici ile uğraştığınız eylemin _shape_'ını belirtebilir misiniz? –

+0

Bunun gibi bir şey gönderiyorum: addEntry ({entryId, entryName, uniqueEntryid}) – eloleon

+0

Bunu deneyin: [link] (https://babeljs.io/repl/#?evaluate=true&lineWrap=false&presets=es2015%2Creact%2Cstage % 2 2Cstage-3 kod = sabit% 20state% 20% 3D% 20% 7B% 0D% 0A% 20% 20entryId% 3A% 7B% 0D% 0A% 20,% 20,% 20,% 20entryName% 3A% 20% 5B% 20 %% 22% 2C,% 20,% 22something2% 22% 2C,% 20,% 22something3% 22something% 22 5D% 0D% 0A% 20,% 20,% 7D% 0D% 0A% 7D% 3B% 0D% 0A% 0D% 0Aconst% 20newState % 20% 3D% 20% 7B% 0D% 0A% 20,% 20,% 5B% 22entryId% 22% 5D% 3A% 7B% 0D% 0A% 20,% 20,% 20,% 20,% 5B% 22entryName% 22% 5D% 3A % 20% 5B ... durum% 5B% 22% 5D% 5B% 22entryName% 22% 5D% 2C% 22something4% 22% 5D% 0D% 0A% 20,% 20,% 7D% 0D% 0A% 7D% 3B 22entryId% % 0D% 0A% 0D% 0Aconsole.log (newState)% 3B & deneysel = doğru ve gevşek = false & spec = false) – jzm

cevap

22

yaptığınızı edilmelidir:

const array1 = [1, 2, 3]; 
const array2 = [4, 5, 6]; 
const eight = 8; 

const newArray = ['stuff', ...array1, 'things', ...array2, ...[7, eight], 9]; 
console.log(newArray); // ["stuff", 1, 2, 3, "things", 4, 5, 6, 7, 8, 9] 

Kontrol: dizilerle

return { 
    ...state, 
    [entryId]: { 
    ...state[entryId], 
    [entryName]: [ 
     ...state[entryId][entryName], 
     uniqueEntry 
    ] 
    } 
}; 

ES6 yayılmış bu gibi çalışır Yaptığınız şeye çok benzer bir şeye sahip olan this gist.

Bu örnek kümeyi de son derece yararlı buldum. Burada harika Bir sürü:

https://github.com/sebmarkbage/ecmascript-rest-spread

Güncelleme: Yorumunuza söylemek gibi entryNameundefined için başlatılır

, bu yapabilirdi:

return { 
    ...state, 
    [entryId]: { 
    ...state[entryId], 
    [entryName]: [ 
     ...state[entryId][entryName] || [], 
     uniqueEntry 
    ] 
    } 
}; 

bence Bu, çok iç içe geçmiş bir veri yapısı kullanılarak React/redux ile çalışmanın ne kadar acı verici olabileceğinin oldukça güzel bir örneğidir. FWIW, eyaletinizi olabildiğince düzleştirmek için birçok kez tavsiye edildi.

+0

Teşekkürler dannyid! Aynı şeyi denedim ve sorun, ilk durumun boş bir nesne olması, yani bu satırın '... state [entryId] [entryName]' hata – eloleon

+0

Ahh atıyor, bu önemli bir bilgi parçası! Sorunuzu güncelleyebilir ve cevabımı günceller miyim? – jaybee

+0

Şimdi sorumu güncelleyeceğim.BTW Ben hemen hemen aynı yaklaşım ile benim sorunu etrafında çalıştım "|| []" – eloleon