2015-11-15 15 views
5

gibi bir şey kullanarak Redux'da çoklu birleştirmeReducers işlevlerini nasıl birleştirebilirim? Imutable.JS kullanarak depolarımı redux-immutablejs aracılığıyla yönetmek için kullanıyorum. Şimdi redux form kütüphanesini kullanmak istiyorum ama redüktörleri birleştiren bir sorun yaşıyorum.immutable.js

Redux-immutable, aktarılan tüm redüktörlerin değişmeyen nesneler döndürüp döndürmeyeceğini kontrol eden bir birleştiriciReducers işlevi sağlar.

Redux, böyle bir denetim gerçekleştirmeyen bir birleşikReducers işlevi sağlar.

Yeniden doğmuş form, redüktörlerini dahil etmenizi gerektirir ancak Redux immutable's combineReducers'ı başarısız olacağı için kullanamıyorum.

Temelde şöyle bu iki işlevi çıkışlarını birleştirmek olduğunu yapmaya çalışıyorum Peki:

import { combineReducers } from 'redux'; 
import { combineReducers as combineReducersUtils } from 'redux-utils'; 
import {reducer as formReducer} from 'redux-form'; 

const mainReducers = combineReducersUtils({ 
    devices, alarms 
}); 

const extraReducers = combineReducers({ 
    form: formReducer 
}); 

export default (mainReducers + extraReducers); 

son satırı Açıkçası çalışmıyor ama Peşinde olduğum şey temelde göstermektedir.

Bunu okumak için zaman ayırdığınız için teşekkür ederiz.

+1

Maalesef sadece olmaya açık combineReducers redux-değişmez etrafında hafif bir sarıcı. –

cevap

5

Belki böyle bir şey?

function rootReducer(state, action) { 
    const newState = combineReducersUtils({devices, alarms})(state, action); 
    return combineReducers({form: formReducer})(newState, action); 
} 

combineReducers dönüş değeri bir redüktör çünkü çalışması gerekir:

(Fonksiyon): düşürücüler nesne içindeki her redüktör çağırır ve aynı olan bir durum nesnesi oluşturur redüktör şekillendirirler.

her sevk yeni bir fonksiyon oluşturmaz güncellendi

https://github.com/rackt/redux/blob/master/docs/api/combineReducers.md


: redux-utils gelen

const mainReducers = combineReducersUtils({devices, alarms}); 
const formReducers = combineReducers({form: formReducer}); 

function rootReducer(state, action) { 
    return formReducers(mainReducers(state, action), action); 
} 
+3

Gelecekte bunu okuyan herkes için bu, şimdi burada tamamen redux formunun bir parçası olarak belgelenmiştir http://erikras.github.io/redux-form/#/faq/immutable-js?_k=dqesvr –

+3

Bu olurdu oldukça kötü bir performans çünkü bir eylem gönderildiğinde her zaman bir işlev tahsis ediyorsunuz. –

+1

@DanAbramov daha iyi bir yolu var mı? Bazı paylaşımlı alanlar (yani sayfa numarası, sort tipi) var ve farklı redüktörlerde mantığı kopyalamak istemiyorum – user3409950