2016-11-08 9 views
0

reactを使用して、サーバーサイドレンダリングのサンプルページを作成します。renderToString()同形反応WebアプリケーションでUIが変更されたときにHTMLマークアップが変更されない

これは私のページは、最初は静的であり、ユーザが入力を入力したとき、それはバックエンドからデータを取得し、一覧をレンダリングし、検索ページで私のserver.jsコード

app.get('*', (req, res) => { 
 
    match(
 
    { routes, location: req.url }, 
 
    (err, redirectLocation, renderProps) => { 
 
     // in case of error display the error message 
 
     if (err) { 
 
     return res.status(500).send(err.message); 
 
     } 
 
     // generate the React markup for the current route 
 
     let markup; 
 
     if (renderProps) { 
 
     markup = renderToString(<RouterContext{...renderProps}/>); 
 
     } else { 
 
     res.status(404); 
 
     } 
 
     // render the index template with the embedded React markup 
 
     return res.render('index', { markup }); 
 
    } 
 
); 
 
});

です同じページ内のコンポーネント

ブラウザでビューページのソースを見ると、バックエンドの応答後にレンダリングされるリストのhtmlではなく、最初の静的コンテンツのみが表示されます。

コンポーネント状態が変更されたときに更新されたHTMLを取得する正しい方法は何ですか。

答えて

-1

フェッチされたデータを状態に保存すると、コンポーネント自体が再レンダリングされます。そうすれば、新しいコンテンツがバックエンドから取得されたときにそのコンテンツが表示されます。

+0

私は時に状態が変化するコンポーネントが描画されますことを知っています。しかし、私の問題は、HTMLのマークアップは変更されないということです。 – John

+0

新しいデータで何をレンダリングしますか?検索文字列からの結果のリスト?それとも問題じゃない? –

+0

はい。結果のリスト。それはレンダリングされています。レンダリングに問題はありません。ビューのページソースに問題があります.HTMLのコンテンツをチェックすると、SEOの目的で新しい要素が追加されません。 SEO – John

0

あなたのクライアントサイドにコンポーネントを組み込み、それ自体をリアクションし、React.renderをDOMの同じ基本要素に呼び出す必要があります。

React.renderToStringの結果をスタティックHTMLとして処理するだけで、正確に処理されます。スタティック html。

clientsideイベントに反応して状態の変化を再描画できるようにコンポーネントをクライアント側で適切にマウントしたい場合は、static htmlにマウントする必要があります。これはReact.renderを呼び出して行いますクライアントサイドのページ読み込み

ここでこの詳細があります:https://strongloop.com/strongblog/node-js-react-isomorphic-javascript-why-it-matters/

+0

のコンポーネントがクライアント側で正しくマウントされ、すべてのイベントとアクションに非常にうまく対応していることに対応して、サーバー側レンダリングを見てください。また、クライアントは状態の変化を再描画します。ただし、ブラウザの「ページソースの表示」を使用すると、HTMLマークアップは変わりません。そして、私はSEOの目的のための更新されたHTMLをしたい。私の機能要件は完全に機能しています。 – John

+0

もちろん、サーバーにその状態を更新しない限り、文字列にレンダリングするときに何らかの形でそれを認識しません。 –

+0

サーバー側の状態をコンポーネントからどのように更新しますか? – John

関連する問題