2016-11-13 12 views
1

ユーザーに関連するデータを取得するAPI呼び出しを行うコンポーネントがあります。ここに私のコードは、だラインAリアクション内のレンダリング関数の内部状態がヌルである

class Header extends React.Component { 

    constructor(props) { 
    super(props); 
    this.state = { user: null }; 

    } 

    componentDidMount() { 

    getUserData(xobni_api).then((data) =>{ 
     this.setState({user : data}); 
     console.log(this.state.user);//A 


    }); 
    } 
    render() { 
    return (
     <div className="header"> 
     <Masthead user={this.state.user.fullName} />//B 
     <PrimaryNav/> 

     </div> 
    ); 
    } 
} 
export default Header; 

ラインでBユーザーがnullであると私はエラーを取得していながら、私は、ユーザーの詳細をレンダリングすることができます。私は何が欠けている。私はcomponentDidMount()componentWillMount()の両方でAPI呼び出しを試みました。どんな助けもありがたい。

+0

は、エラー・ログを含めることはできますか? –

+0

おそらく、起こっているのは、あなたの子コンポーネントが、あなたのajaxリクエストが実行される前にレンダリングされているということです。たぶん、compomentWillReceivePropsを使って助けてくれるでしょう。 – misdreavus79

答えて

3

初めてコンポーネントをレンダリングするときthis.state.usernullです。それはコンストラクターの設定と同じです。したがって、this.state.user.fullNameは、null.fullNameに相当し、クラッシュします。

あなたのいずれか自分のuserオブジェクトの形状のあなたの初期状態の担当者に確認する必要があり、またはコンポーネントをレンダリングする前に、ヌルチェックを実行する必要があります。

render() { 
    return (
    <div className="header"> 
     {this.state.user && // <-- check if truthy 
     <Masthead user={this.state.user.fullName} /> 
     } 
     <PrimaryNav /> 
    </div> 
) 
} 

あなたはAJAXリクエストをやっているので、あなたはまた、ローディングインジケータを表示するには、この機会を利用することができます

render() { 
    return (
    <div className="header"> 
     {!this.state.user && // <-- if user is still null 
     <div>Loading...</div> 
     } 

     {this.state.user && // <-- check if truthy 
     <Masthead user={this.state.user.fullName} /> 
     } 
     <PrimaryNav /> 
    </div> 
) 
} 
0

初期では、レンダリング、this.state.usernullで、あなたはからfullnameプロパティを取得しようとしていましたオブジェクトなので、エラーが発生します。チェンジ・ラインBを修正するには

{this.state.user && <Masthead user={this.state.user.fullName} />} 
関連する問題