Reduxを使って店舗を管理するReactJsアプリがあります。私の状態は複雑なjsonであり、そのフィールドは変更可能です。私がレデューサーを開始するとき、サーバからコンテンツをフェッチする前にそれにアクセスするとき、初期状態を指定する必要があります。私は 'undefined'エラーを受け取ります。以下は、例です reduxで反応しない初期状態は反応しません
fetchContent()
doesntのは、この時点で呼び出されているように見えるので、初めてのコンポーネントを初期化は、state.reducer1.a.b.c
が未定義スロー今
//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}))
私の質問はどのように私はこの問題を解決するのですか?減速機の初期状態を唯一のオプションに指定していますか?以下、
//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または状態からのデータアクセスのレベルごとにヌルチェックを行うのいずれかの場合だけそう可能な解決策! 機能が外にあると思われていました。私はこれをすぐに書きましたので、正しく機能していませんでした。もちろん、fetchContentは内部的にディスパッチを呼び出すアクション作成者の関数です。 – user3807940
あなたの期待が何か、あなたのためのヌルチェックを行うための何かのためにはわからないのですか?実際には、a)predataとb)のデータをチェックする2つの状態があります。これは、「すべてのレベルのデータアクセス」ではなく、ただ1つのヌルチェックです。 – azium