我有一个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