2016-06-12 18 views
29

Bir destan işlevi içindeki redux durumuna nasıl erişebilirim?Bir redux-saga işlevinin içinde devlet/mağazadan bir şeyler nasıl alınır?

  TOOLBAR   
--------------------------------- 
User info  | Current Project 

Her bölüm o kendi redüktör, destan, eylemler ve devlet ile farklı bir bileşenidir:

My Problem

Ben bir uygulama aşağıdaki bölümlerden oluşan sahiptir.

Araç çubuğunda "SAVE_PROJECT" işlem türünü gönderen bir kayıt düğmesi vardır. Sorun şu ki, araç çubuğunun projeyi tanımasını istemiyorum (daha fazla sorumlulukları var ve sadece türle eylemleri göndermek istiyorum).

... 
export function* saveProjectTask() { 
    while(true) { 
    yield take(SAVE_PROJECT); 
    let project = /* THIS IS THE PROBLEM, I DON'T HAVE THE PROJECT */; 
    yield call(fetch, '/api/project', { body: project, method: 'PUT' }); 
    yield put({type: SAVE_PROJECT_SUCCESS}); 
    } 
} 

ben destan içindeki redux durumdan projeyi alamayan:

ben "SAVE_PROJECT" dinler bir proje ile ilgili destan var.

Curren projesi redüktörü içindeki "SAVE_PROJECT" etkinliğini dinleyebileceğimi düşünmüyorum ve daha sonra redüktörün içinde projeyi alıp projeyle farklı bir eylem gerçekleştirebiliyorum.

Araç çubuğumun tüm eyalet ağacını bilmesini ve her eylem için eylemle ilgili bir şey göndermesini istemiyorum.

Devleti kendilik destanına nasıl geçebilirim? Ya da sadece devletin ilgili kısmı?

cevap

74

, redux-saga destan içindeki mevcut bunun bir kısmını almak için devlete bir selector çağırmak için çok kullanışlı bir API select() ortaya çıkarır. senin Örneğin

basit uygulama olabilir:

@markerikson önerdiği doc ek olarak
/* 
* Selector. The query depends by the state shape 
*/ 
export const getProject = (state) => state.project 

// Saga 
export function* saveProjectTask() { 
    while(true) { 
    yield take(SAVE_PROJECT); 
    let project = yield select(getProject); // <-- get the project 
    yield call(fetch, '/api/project', { body: project, method: 'PUT' }); 
    yield put({type: SAVE_PROJECT_SUCCESS}); 
    } 
} 

, Redux ile selectors nasıl kullanılacağı açıklanır D. Abramov tarafından çok iyi video tutorial yoktur. Twitter'da this ilginç konuya bakın.

+2

Tam olarak ne istediğim .. Bunu özlemediğime inanamıyorum –

9

Bu "seçici" işlevlerin ne için olduğunu. Onlara tüm eyalet ağacını aktarıyorsunuz ve devletin bir parçasını döndürüyorlar. Seçiciyi çağıran kodun, nolu numaralı veriyi bilmesi gerekmiyor. Bazı örnekler için bkz. http://redux.js.org/docs/recipes/ComputingDerivedData.html.

Bir destan içinde, select() API bir seçiciyi yürütmek için kullanılabilir. @markerikson zaten söylediği gibi

İlgili konular