私はReact/Reduxを学び始め、おそらく非常に基本的な質問である何かを見つけました。以下は、簡単にするためにいくつかのコードを削除して私のアプリから抜粋です。React Reduxアプリケーションでサーバーから初期データを取得する場所はどこですか?
私の状態は、デフォルトで空のサイトの配列によって記述されます。後で減速する人は、ユーザーが別のページにページを変更したときに別のサイトのセットを読み込むように、今のところは何もしていませんが、LOAD_SITES
アクションを実行します。反応はPublishedSitesPage
のレンダリングから始まり、PublishedSitesBox
をレンダリングし、データをループして個々のサイトをレンダリングします。
デフォルトの空の配列ですべてをレンダリングし、「サーバーからサイトをロードする」約束を開始し、一度解決したらLOAD_SITES
アクションを送出します。この電話をかける最善の方法は何ですか?私はPublishedSitesBox
またはおそらくcomponentDidMount
のいずれかのコンストラクタを考えていました。しかし、これがうまくいくかどうかは確信していません。私の心配は、私がこのように無限ループを作り、再レンダリングを続けるということです。私は "haveRequestedInitialData"の行に沿っていくつかの他の状態パラメタを持つことによって何らかの形でこの無限ループを防ぐことができたと思います。私が持っていたもう一つのアイデアは、ReactDOM.render()
の直後にこの約束をすることです。これを行うには最高のクリーンな方法は何ですか?
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
});
ありがとう、ええ、それは意味があります、これは私が一緒に行こうと思っていた方法の1つでしたが、それが意図された方法であるのか、何らかの "デフォルト状態を取得"反応/還元フレームワークのどこかで。明日それを試してみて、それがうまくいくかどうかを見てみましょう! – Eugene
Reduxストアに関するすばらしいことの1つは、実際にはさまざまな場所からのデータの共通の情報センターになることができることです。たとえば、リモートのライブデータソースへのWebソケットは、ユーザーの入力なしでストアを更新するアクションをディスパッチすることができ、UIは新しいステートがどこから来たのかを知る必要はありません。 –
もちろん、アクション作成者は非同期要求を代わりに行うことができます。 –