React/Redux'u öğrenmeye başladım ve muhtemelen çok basit bir soru olan bir şeye tökezledim. Aşağıda, sadeleştirme uğruna kaldırılmış bazı kodlarla uygulamamın snippet'leri var.Bir React Redux uygulamasında ilk verileri sunucudan nereden alırım?
Durumum, varsayılan olarak boş olan bir siteler dizisi tarafından açıklanmaktadır. Daha sonra indirici, kullanıcı farklı bir sayfaya paginat oluşturduğunda farklı bir site kümesini yüklemek için LOAD_SITES
eylemine sahip olacak ancak şimdilik hiçbir şey yapmıyor. Tepki, PublishedSitesPage
'u oluşturarak başlar, daha sonra PublishedSitesBox
'u oluşturur, bu daha sonra veriler üzerinde döngü yapar ve tek tek siteler oluşturur.
Yapmak istediğim, her şeyi varsayılan boş diziyle oluşturması ve bu arada "sunucudan yükleme siteleri" sözünü başlatması ve bir kez çözüldüğünde LOAD_SITES
eylemini göndermesidir. Bu çağrıyı yapmanın en iyi yolu nedir? PublishedSitesBox
ya da belki de componentDidMount
'un kurucusunu düşünüyordum. Ancak bunun işe yarayıp yaramayacağından emin değilim - kaygılarım yeniden şekillendirmeye devam edecek sonsuz bir döngü oluşturacağım. Sanırım bu sonsuz döngüyü bir şekilde "haveRequestedInitialData" satırları boyunca başka bir devlet paramiti ile önleyebilirim. Yaptığım bir diğer fikir ise, bu sözü ReactDOM.render()
yaptıktan sonra yapmak. Bunu yapmanın en iyi ve en temiz yolu nedir?
export default function sites(state = [], action) {
switch (action.type) {
default:
return state;
}
}
...
const publishedSitesPageReducer = combineReducers({
sites
});
ReactDOM.render(
<Provider store={createStore(publishedSitesPageReducer)}>
<PublishedSitesPage />
</Provider>,
this.$view.find('.js-published-sites-result-target')[0]
);
...
export default function PublishedSitesPage() {
return (
<PublishedSitesBox/>
);
}
...
function mapStateToProps(state) {
return { sites: state.sites };
}
const PublishedSitesBox = connect(mapStateToProps)(({sites}) => {
// render sites
});
Teşekkürler, evet, bu mantıklı ve bu benim düşünmeyi düşündüğüm yollardan biri oldu ama bunu yapmanın ya da bir çeşit "getirme durumu" büyüsünün gizli olup olmadığından emin değildi. Bir yerde tepki/redux çerçevesinde. Yarın deneyecek ve işe yarayıp yaramadığını görecek! – Eugene
Bir Redux mağazası hakkındaki en müthiş şeylerden biri, aslında çeşitli yerlerden gelen veriler için ortak takas odası olabileceğidir. Örneğin, uzak canlı veri kaynaklarına yönelik web soketleri, herhangi bir kullanıcı girişi olmadan mağazanızı güncelleyen eylemler gönderebilir ve kullanıcı arayüzünüzün yeni devletin nereden geldiğini bilmesi veya önemsemesi gerekmez. –
Elbette, harekete geçirici, bunun yerine async isteğini yapabilir. –