2017-01-07 5 views
2

リプスを使って非同期に割り当てられた小道具でマップを呼び出すときに、定義されていないエラーが発生しないように、デフォルトの小道具を反応させる正しい方法は何ですか?今、次の構文では、レンダリングの初期呼び出しでデータが定義されていないため、trans_filterを割り当てるときにエラーが発生します。Reduxを使用しているときにReactJSのデフォルトの小道具を宣言する方法は?

class ContainerComponent extends React.Component { 
    static defaultProps = { 
    searchProps: { 
     data: [] 
    } 
    }; 

    constructor(props) { 
    super(props); 
    } 

    render(){ 
    let trans_filter = JSON.parse(JSON.stringify(this.props.searchProps.data)); 
    } 
} 

const mapStateToProps = (state) => ({ 
    searchProps: state.searchProps 
}); 

export default connect(mapStateToProps, {getTransactionsAll})(ContainerComponent); 
+0

があります。http://stackoverflow.com/questions/38004703/set-default-props-for-a-react-component –

+0

あなたは 'connect'とレデューサーのコードを投稿できますか? – lpan

+0

これらの提案には運がありません。 –

答えて

3

ここReactJSコンポーネントを作成するためのES6クラスの構文を使用しているときに、デフォルトの小道具を宣言することができます方法は次のとおりです。

class ContainerComponent extends React.Component { 
    constructor(props) { 
    super(props); 
    } 

    render(){ 
    let trans_filter = JSON.parse(JSON.stringify(this.props.searchProps.data)); 
    } 
} 

ContainerComponent.defaultProps = { 
    searchProps: { 
    data: [] 
    } 
}; 

export default ContainerComponent; 

また、defaultPropsを宣言するための別の構文があります。 これはショートカットですが、あなたのビルドでES30のプロパティイニシャライザが有効になっている場合にのみ動作します。私はあなたの構文では問題を見ていないので、私は、それはあなたのために動作しない理由ですと仮定します。

class ContainerComponent extends React.Component { 
    static defaultProps = { 
    searchProps: { 
     data: [] 
    } 
    }; 

    constructor(props) { 
    super(props); 
    } 

    render() { 
    let trans_filter = JSON.parse(JSON.stringify(this.props.searchProps.data)); 
    } 
} 

export default ContainerComponent; 

編集:あなたのmapStateToPropsを共有した後、はい、それは再来とは何かを持っています!

この問題はreducerによって発生しています。 initial state shapeを宣言する必要があります。また、各レデューサーで初期状態を指定する必要があります。 Reduxは初めてundefined州の減速機に電話します。これは私たちのアプリの初期状態を返すチャンスです。詳細については

function yourReducer(state = searchPropsInitialState, action) { 
    // ... switch or whatever 

    return state; 
} 

を、handling actions in the Redux docsを参照してください:あなたはsearchPropsを操作するとき、あなたの減速で、その後

const searchPropsInitialState = { 
    data: [] 
}; 

は、初期状態を設定します。

+0

ありがとうございます。私はあなたが言っていること全てを理解しており、私はそれをすべて試しましたが、私は何かが欠けているに違いありません。サンプルコードで使用している構文を使用できるため、ES6を使用しています。私は私のアプリを実行し、console.log(this.props.searchProps.data)を行うとき、私はレンダリングが初めて入力されたときに未定義になるので、私はエラーが発生します。デフォルトの小道具で[]に設定した場合、なぜそれが定義されていないのですか?これは、デフォルトの小道具を使用するための正確な目的なので、エラーは発生しません。 –

+0

それはreduxと関係がありますか?最初のサンプルコードを編集してmapStatetoPropsを組み込み、reduxのコードを接続しました。 –

+0

@ user1991118ああ、はい、それはReduxと関係があります! :)私はちょうど私の答えを編集しました、上記の編集をご覧ください。質問に「Redux」タグを追加してください。 –

関連する問題