我有一個ReactJs應用程序,它使用Redux來管理其商店。我的狀態是一個複雜的json,其文件可以改變。當我啓動reducer時,我必須指定初始狀態,否則在從服務器獲取內容之前訪問它時,會出現'undefined'錯誤。以下是例子,初始狀態未定義在REDX連接的反應應用程序
//Test.jsx
class Test extends React.Component{
componentWillMount(){
fetchContent({
type: SET_CONTENT
});
}
render(){
return(
<div> {this.props.header} </div>
)
}
mapStateToProps(state){
return{
header: state.reducer1.a.b.c
}
}
}
export default (mapStateToProps)(Test);
//reducer1.js
export default function reducer1(state = {}, action = {}) {
switch (action.type) {
case SET_CONTENT:
return Object.assign({}, action.data);
default:
return state;
}
}
//reducer2.js
export default function reducer2(state = {}, action = {}) {
switch (action.type) {
case SET_SOMETHING_ELSE:
return Object.assign({}, action.data);
default:
return state;
}
}
//CombinedReducer.js
export default combinedReducers(Object.assign({}, {reducer1}, {reducer2}))
現在,當首次組件初始化,state.reducer1.a.b.c
因爲fetchContent()
犯規似乎在這一點上被稱爲拋出不確定的。
所以我的問題是我如何解決這個問題?在reducer中指定初始狀態是唯一的選擇嗎?像下面,
//reducer1.js
export default function reducer1(state = { a: { b: { c: "somedata"}}}, action = {}) {
switch (action.type) {
case SET_CONTENT:
return Object.assign({}, action.data);
default:
return state;
}
}
所以唯一可能的解決方案如果任lnitialize狀態像我一樣還是從國家的數據訪問每個級別做null檢查! 是的,功能應該是在外面。因爲我很快就寫下了這個,所以沒有仔細研究。是的,fetchContent是我內部調用dispatch的動作創建器上的一個函數。 – user3807940
我不確定你的期望是什麼,有些事情爲你做空檢查?你真的只有兩個狀態來檢查a)predata和b)數據。這只是一個空檢查,而不是'每個數據訪問級別' – azium