2017-10-12 4 views
0

js google apiライブラリからGoogleログインを処理するコンポーネントがあります。Next.jsサーバーはコンポーネントウィンドウオブジェクトをレンダリングしました

export default class Index extends React.Component { 
    componentDidMount() { 
    window.onGoogleLoginSuccess = this.onGoogleLoginSuccess.bind(this) 
    } 

    render() { 
    return (
     <div 
      className="g-signin2" 
      data-onsuccess="onGoogleLoginSuccess" 
      data-theme="dark" 
     /> 
    } 
} 

エクスプレスを私のサーバーとして使用しているので、コンポーネントはサーバーでレンダリングされています。

ログをいくつか入れて、サーバーでrenderメソッドが呼び出されており、componentDidMountが呼び出されないことがわかりました。

next.jsがサーバー内のコンポーネントをレンダリングするときに、クライアント側で実行されるいくつかのコードを置くコールバックがありますか?私はウィンドウオブジェクトにアクセスすることができます。

+0

これは決して呼び出されませんか(componentDidMount)? next.js docsによると、このライフサイクルメソッドはクライアント上でのみ実行されます。 'コンポーネントが実際にクライアント側にマウントされているかどうかを確認しましたか? –

+0

@PieroDivasto決して呼び出されません。レンダリングメソッドはサーバー側で呼び出されているので、コンポーネントがサーバー側にマウントされていると思います。私の質問は、コンポーネントがサーバー側にマウントされているときにクライアント側で実行されるコードを置くコールバックメソッドがあるかどうかです。 – jonathanrz

答えて

1

onComponentDidMountコンポーネントはのみ搭載クライアント側であるように、windowにアクセスするための正しい場所である(ただし、レンダリングの両方クライアント&サーバ上で起こります)。

this.onGoogleLoginSuccessの例では、完全なコンポーネントではないかもしれませんが、その例ではthisがそのコンテキストで反応インスタンスを参照するため、この例のようには見えません。

+0

私はこの例では必要ではないので実装を提供していませんが、実装しました。私のコードは動作していましたが、ルートでいくつかの検証を行うためにエクスプレスサーバを追加しました。そして、今度はonComponentDidMountはもはや呼び出されていません。 – jonathanrz

+0

私の問題は、jsファイルのエラーによって引き起こされていることがわかりました。なぜなら、Chromeはファイルを解析できず、実行を停止し、onComponentDidMountを実行しませんでした。私はあなたの答えを受け入れます。なぜなら、問題はnext.jsの流れにないと確信していたからです。ご協力いただきありがとうございます。 – jonathanrz

関連する問題