2017-03-13 12 views
-1

私は私のアプリケーションのために反応と還元を使用しています。私の問題は、私の小道具が最初に定義されていない2番目の小道具を受け取り、2番目のものは大丈夫です。だから私は小道具を使用することはできません。リアクターリダクションコールを2回

import ... 
 

 
class Home extends Component { 
 
    
 
    //some code logic 
 
    
 
    render(){ 
 
console.log(this.props.header); 
 
    
 
const header = this.props.header; 
 
    
 
    return (
 
     <Welcome title={header.title} /> 
 
    ) 
 
    } 
 

 
} 
 

 

 
const mapStateToProps = (state) => { 
 
    return { 
 
    header: _.find(state.header, { 'page': 'accueil' }) 
 
    } 
 
} 
 

 
export default connect(mapStateToProps)(Home);

は私に2答えを与えるにconsole.log: 1 /未定義 2/OBJ(私は必要なものという)の配列

キャッチされない例外TypeError:未定義のプロパティのタイトルを読み取ることができません。

+0

で定義されているかどうかを確認:

var initialState = { id: '', page: '', title: '', metaTitle: '', subtitle: '' } const reducerState = (state = initialState, action) => { ...... //Do what you want here return state } 

第二減速

に初期状態を設定します。だから、二つのこと

最初に行うことができます。 'state.header'はいつ設定されますか? API呼び出し後? render()関数の先頭に 'if(!this.props.header)return null'を追加するのと同じくらい簡単かもしれませんが、それは問題を隠して原因を修正しないかもしれません。 –

+0

はい、APIから呼び出しています。私は子供に渡すので、それは動作しませんが、私はこのコンポーネント内の正常なループをやっている場合、それはうまく動作します。 – Nicks

+0

これが当てはまる場合、最初にレンダリングしたとき(未だデータを持っていない)、未定義であるということは予期しないことではありません。 「null」を返すことは、コンポーネント内で「ループ」を実行していないことに注意してください。レンダリングすることはありません。初期レンダリングの場合はありません。また、より良いユーザーエクスペリエンスのために 'null'ではなく' Loading'コンポーネントを返すこともできます。 –

答えて

0

T彼の問題はかなり単純です。あなたのケースでは、減速機を定義するとき、最初の状態はundefinedに設定されます。これは、最初に返され、処理の後に日付が返されます。 header.titleはここに行くためにもう少しを必要とするコンポーネント

class Home extends Component { 

    //some code logic 

    render(){ 
console.log(this.props.header); 

const header = this.props.header; 

    return (
     {header.title && <Welcome title={header.title} />} 
    ) 
    } 

} 


const mapStateToProps = (state) => { 
    return { 
    header: state.header 
    } 
} 

export default connect(mapStateToProps)(Home); 
+0

解決策を試してもエラーが発生しました 'initialState'が定義されていません – Nicks

+0

'var intialState = {' to 'var initialState = {' –

+0

変数名initialstateにタイプミスがあり修正されました。 –