Soru Bir redux-saga işlevinin içinde devlet / mağazadan bir şey nasıl alınır?


Bir destan işlevi içindeki redux durumuna nasıl erişebilirim?

Benim sorunum

Aşağıdaki bölümlerden oluşan bir uygulama var:

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

Her parça kendi redüktörü, destanı, eylemleri ve durumu ile farklı bir bileşendir.

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

"SAVE_PROJECT" i dinleyen bir projeyle ilgili destanım var:

...
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});
  }
}

Projeyi destan içindeki redux durumdan alamıyorum.

Curren projesi indirgeyici içindeki "SAVE_PROJECT" etkinliğini dinleyebileceğimi düşünmüyorum ve daha sonra redüktörün içinde projeyi almak ve proje ile farklı bir eylemde bulunmak.

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ı?


44
2018-06-12 09:53


Menşei




Cevaplar:


@Markerikson'un dediği gibi, redux-saga çok kullanışlı bir API ortaya çıkarır select() çağırmak selector Devletin bazı kısımlarını destanın içinde bulmaya çalıştı.

Örneğiniz için basit bir uygulama olabilir:

/*
 * 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});
  }
}

Önerilenlere ek olarak doktor @markerikson tarafından, çok iyi video öğretici D. Abramov tarafından nasıl kullanılacağını açıklayan selectors Redux ile. Ayrıca kontrol edin bu Twitter'da ilginç konu.


98
2018-06-12 22:00



Tam olarak ne istediğimi .. İnanmıyorum özledim - Adam Tal


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 arayan kodun bilmesi gerekmez. nerede Verilerde olduğu gibi, sadece geri döndü. Görmek http://redux.js.org/docs/recipes/ComputingDerivedData.html bazı örnekler için.

Bir destan içinde select() API Bir seçici çalıştırmak için kullanılabilir.


15
2018-06-12 18:28