私はReact-Reduxアプリケーションにサーバーサイドレンダリングを使用しています。そして私は、対応するIDを持つ都市の例のリストについては、いくつかの定数をロードするために、アプリケーションの起動時にしたい:React + Reduxで静的定数を読み込む
[
{
name: "London",
id: 1
}
...
]
私はそれがサーバ側でstore
に、このデータを入れて、ここで提案したようwindow.__INITIAL_STATE__
を使用して、それをクライアントに提供するために、より良いことだと思いますhttp://redux.js.org/docs/recipes/ServerRendering.html
この定数は読み取り専用であり、データの正規化のためにプリロードします。たとえば、後で都市名を持つユーザーではなく、都市IDを持つユーザーのリストを取得することができます。{name: "Alex", cities: [1,2]}
問題を解決するには、このエラーが発生しました:
Unexpected key "cities" found in preloadedState argument passed to createStore. Expected to find one of the known reducer keys instead: "colors". Unexpected keys will be ignored.
この状況を処理するには、いくつかのエレガントな方法を探しています。
今の私はそれをどのように扱うか2つのアイデアを持っている:
// server.js
window.INITIAL_ACTIONS = [
{ type: "REQUEST_LOGIN_SUCCESS", user: {userId, userName, userEmail, etc} },
{ type: "REQUEST_CITIES_SUCCESS", [..listOfCities] },
]
:
は、常にデフォルトの状態を返します空の減速
export const cities = (state = [], action={ type: null }) => { return state }
Send from server initial actions with payloads, and execute them on client at startupを作成します。
私
client-index.js
で、右のストアを作成した後、それらのアクションをディスパッチ://client-index.js window.INITIAL_ACTIONS.forEach(store.dispatch)
をだから、私のアプローチの一つは良いですか?または、他のより洗練されたソリューションを知っているかもしれませんか?
ありがとうございました。
なぜアプリケーション定数を店舗に置く必要があるのですか?ウィンドウオブジェクトにそれらを保持してください。 –
@DannyDelottこれは本当に大きな臭いです。 – Gregg
なぜですか?ユニバーサル・リアクション・アプリケーションでは、状態全体がウィンドウ・オブジェクトに表示されます。 –