Yanıtlar:
@Markerikson zaten söylediği gibi redux-saga
çok kullanışlı bir API ortaya select()
bir çağırmak için selector
destan içindeki mevcut bunun bir kısmını almak için durumuna.
Örneğiniz için basit bir uygulama şöyle 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});
}
}
@Markerikson tarafından önerilen dokümana ek olarak, D. Abramov tarafından Redux ile nasıl kullanılacağını açıklayan çok iyi bir video eğitimi varselectors
. Twitter'daki bu ilginç konuya da bakın .
"Seçici" işlevler bunun içindir. Onlara tüm eyalet ağacını geçirirsiniz ve devletin bir kısmını geri verirler. Seçiciyi çağıran kodun, verinin o durumda nerede olduğunu, sadece döndürüldüğünü bilmesine gerek yoktur . Bazı örnekler için http://redux.js.org/docs/recipes/ComputingDerivedData.html adresine bakın .
Bir destanda, select()
API bir seçiciyi yürütmek için kullanılabilir.
Oluşturucu işlevi içindeki bir geri aramadan bir eylem göndermek için bir eventChannel kullandım
import {eventChannel} from 'redux-saga';
import {call, take} from 'redux-saga/effects';
function createEventChannel(setEmitter) {
return eventChannel(emitter => {
setEmitter(emitter)
return () => {
}
}
)
}
function* YourSaga(){
let emitter;
const internalEvents = yield call(createEventChannel, em => emitter = em)
const scopedCallback = () => {
emitter({type, payload})
}
while(true){
const action = yield take(internalEvents)
yield put(action)
}
}