我爲我的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]}
問題是,如果我將它們放入存儲區,那麼我會強制爲此常量創建縮減器,否則, m得到這個錯誤:
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.
所以我正在尋找一些優雅的方式來處理這種情況。
現在我有兩個想法如何處理:
創建空的減速,它總是會回到默認狀態
export const cities = (state = [], action={ type: null }) => { return state }
Send from server initial actions with payloads, and execute them on client at startup:
// server.js window.INITIAL_ACTIONS = [ { type: "REQUEST_LOGIN_SUCCESS", user: {userId, userName, userEmail, etc} }, { type: "REQUEST_CITIES_SUCCESS", [..listOfCities] }, ]
而且在我client-index.js
,派遣這些行動創造了店之後:
//client-index.js
window.INITIAL_ACTIONS.forEach(store.dispatch)
所以,是我的方法之一是好的?或者可能你知道一些其他更優雅的解決方案?
謝謝。
爲什麼應用程序常量需要存儲在存儲中?只要把它們放在窗口對象上。 –
@DannyDelott這是一個非常大的臭不不不。 – Gregg
這是爲什麼?在通用的反應應用程序中,整個狀態在窗口對象上出現。 –