2016-12-14 8 views
1

私はReact/Redux/Firebaseアプリケーションを持っており、レンダリングメソッドの前に現在のユーザーのユーザー名を確認する必要があるため、dbに移動して別のユーザーを取得する必要があるかどうかを確認します。レンダリングメソッドの外でReact/Reduxの現在のユーザーにアクセスするにはどうすればよいですか?

しかし、何らかの理由で私は明確ではないが、レンダリング方法外でthis.props.currentUserにアクセスすることはできません。 nullを返します。

基本的に、私はこの関数の内部にアクセスしたいと思います。私はrender()にそのデータの罰金にアクセスすることができ、エラー

Cannot read property username of null 

を取得

componentDidMount() { 
    var userURL = window.location.pathname.replace(/^\/([^\/]*).*$/, '$1'); 

    if(this.props.currentUser.username !== userURL) { 
    this.getDbUser(userURL); 
    console.log(userURL); 
    } 
} 

:私のコードは次のようになります。どのようにこれを修正するための任意のアイデアは素晴らしいだろう。ありがとう!

+0

チャンスはあなたのrenderメソッドを二回実行され、セカンドランで、ユーザーが定義されています。それがレンダリングで動作するのはなぜですか – corvid

+0

ありがとう、レンダリングは実際には2回実行されていますが、理由はわかりません。私はコンストラクタのfetchUserメソッドを呼び出していますので、それを利用できるようにする必要はありませんか? –

+0

非同期の場合 – corvid

答えて

1

EDIT:実際には、ComponentDidMountが非同期の 'fetch'が返される前に実行されているため、現在のユーザーはnullになります。 ComponentDidMountComponentWillReceiveProps(nextProps)に変更し、コード内の 'this.props'を 'next.props'に置き換えてください。

ComponentWillReceivePropsのすべては、あなたの小道具が 'フェッチされた'ユーザーで更新されると実行されます。例えば:

componentWillReceiveProps(nextProps) { 
    var userURL = window.location.pathname.replace(/^\/([^\/]*).*$/, '$1'); 

    if(nextProps.currentUser && nextProps.currentUser.username !== userURL) { 
    this.getDbUser(userURL); 
    console.log(userURL); 
    } 
} 

コード上もあるCurrentUserがnullであれば、エラーが存在しない場合に&&を含みます。

ドキュメント:https://facebook.github.io/react/docs/react-component.html#componentwillreceiveprops

+0

ニース!これはうまくいくようです。ありがとうシェーン! –

関連する問題