2016-03-30 10 views
0

Ben updates api yanıtı duruma böyle id tarafından eşleştirilmiş basit SEARCH_SUCCESS düşürücü vardır: benim devlet kimliği ile eşleştirilmiş çünkü

[searchActionTypes.SEARCH_SUCCESS]: (state, { companies }) => { 
    return update(state, { $merge: _.indexBy(companies, '_id') }) 
}, 

Ancak, bu halde varolan herhangi şirketleri değiştirilmesi gerekir. Bu bir problem çünkü mevcut şirketlerde mevcut olan ekstra verileri korumak istiyorum.

Sadece şirketler aracılığıyla yineleme ve elle $merge durumu:

const newState = _.deepClone(state) 
_.forEach(companies, company => newState[company._id] = state[company._id] ? 
    update(state[company._id], { $merge: company }) : company 
) 
return newState 

Ama bu aksak hissediyor. Anahtarlar mevcut değilse, koşullu olarak $merge veya $set olacak iç içe durumu güncelleştirmenin daha zarif bir yolu var mı?

+0

İlgili: https: // stackoverflow .com/questions/32135779/update-nested-data-in-redux-store. Ayrıca bkz. Https://github.com/gaearon/normalizr. –

+0

Bağlandığınız soru, redux durumunu, yanıt-addons güncellemesini kullanmanızı öneren kabul edilen bir yanıtla güncellemeyle ilgili genel bir sorudur. Bu yardımcıyı zaten kullanıyorum ve sorumuma bağladım. Abramov (redux'un yaratıcısı) ayrıca normalleştiriciye cevap verir ve önerir. Verilerim zaten normalize edildi, bu yüzden kayıtları neden kimliğe göre indeksliyorum. –

+0

Sorunu açıklığa kavuşturmak gerekirse, benim sorum, güncelleştirme addon $ birleştirme işlecinin eksikliğini giderir, çünkü bu yalnızca lodash ataması gibi sığ bir şekilde birleşir. –

cevap

1

bazı işe yaramaz sonra sırf bunun assign lodash esasen eşittir çünkü, güncelleme $merge operatörü terk edip böyle lodash cloneDeep ve merge bir combo ile gitti:

[dupeSearchActionTypes.SEARCH_SUCCESS]: (state, { companies }) => { 
    // manually _.merge companies into state because react-addons-update $merge is shallow 
    return _.merge(_.cloneDeep(state), _.indexBy(companies, '_id')) 
}, 
İlgili konular