Redux'u öğrenmek için basit bir web uygulaması başlatıyorum.İç içe geçmiş redüktörler
Kullanıcı adı ve parolayı doğrulayan bir "kimlik doğrulama" eylemi varsa. Ardından çağrılacak bir "giriş" veya "başarısız" eylemi istiyorum. Nasıl olduğunu anlayamıyorum. Kimlik doğrulama adımını çağırabilirim, ancak iç içe/sonraki çağrı yürütülmez.
Bir işlevi başka bir işlevin içinden çağırmak nasıl mümkündür?
Kodum aşağıdaki gibi görünür (benim sorunum ^^ aşağı kaynar ne kadar sinir bozucu budur): Bir indirgeyicide
function authenticateClient(state, client){
if (client.password === 'perfectsec')
return dispatch(Actions.connectClient(client));
else
return dispatch(Actions.refuseClient(client));
}
çağrılması sevk yanlıştır. En basit olanı, doğrudan connectClient(state, client)
veya refuseClient(state, client)
işlevlerini çağırmak olacaktır. Ama sonra bu adım redux akışından geçmez.
bağlam kodu:
/* actions.js */
export function authenticateClient(client) {
return { type: Types.authenticateClient, client };
}
export function connectClient(client, isNew) {
return { type: Types.connectClient, client, isNew };
}
export function refuseClient(client) {
return { type: Types.refuseClient, client };
}
/* main.js */
/* reducer */
const reducer = (state = loadState(), action) => {
console.log(chalk.red(`*${action.type}*`));
switch (action.type) {
case Actions.Types.authenticateClient:
return authenticateClient(state, action);
case Actions.Types.connectClient:
return connectClient(state, action);
case Actions.Types.refuseClient:
return refuseClient(state, action);
default:
return state;
}
};
/* store */
store = createStore(reducer);
/* app */
store.dispatch(Actions.authenticateClient({username, password}));
Kodunuzu% 100 takip edemiyorum, bu yüzden sadece açıklığa kavuşturmak için - redüktörlerin içindeki eylemleri göndermeye çalışmıyorsunuz, değil mi? Çünkü bu eylemleri göndermek için% 100 _never_ olduğunuz bir yer. –
Teşekkürler. Evet, tam olarak yapmaya çalıştığım şey bu. Ve bunun yanlış olduğunu fark ettim. Ama amacımı nasıl gerçekleştireceğimi anlamıyorum. Açıklığa kavuşturmaya çalışırken bir paragraf ekledim. –
Eylemleri koşullu olarak göndermeniz gerekiyorsa, bu mantık büyük olasılıkla başka bir eylem oluşturucuda olmalıdır (örn. "Actions.connectClientIfValid (client)') - giriş geçerliyse, "Actions.connectClient (client)" sonucunu döndürür, değilse, 'Actions.refuseClient (client)' sonucunu döndürün. Sonra geri gönderilen her şeyi gönderebilirsiniz. Tüm redüktörünüzün yapması gereken 'state + action = newState' - uygulamanızın geri kalanında hiçbir zaman yan etkisi olmamalıdır. –