2017-03-26 26 views
3

に添付されていない反応して、私はindex.jsで次のルーティングを持っていた:は、サーバー側レンダリングイベントリスナーは、クライアント側で

アプリケーションとログインのコンポーネントを2反応する
ReactDOM.render(
    <Router history={browserHistory}> 
     <Route path="/" component={App}/> 
     <Route path="/login" component={Login}/> 
    </Rouuter> 
) 

。ログインコンポーネントのフォームにonSubmitイベントがあります。

export default Login extends React.Component { 

constructor() { 
    ..... 
    this.auth = this.auth.bind(this); 
} 

auth(e) { 
    ..... 
} 

render() { 
    return (
     .... 
     <form method="post" onSubmit={this.auth}> 
     .... 
     <input type="submit" value="Log In"/> 
     </form> 
     .... 
    ) 
} 

クライアント側でアプリケーションを実行しても問題は発生しませんでした。送信イベントは正常に発生しました。クライアント側スクリプトはstatic/js/bundle.jsにバンドルされています。

今、私はnodejsで表現して表現したいので、以下のようにサーバーを作成しました。

const express = require('express'); 
const router = express.router(); 
var app = express() 

const login = require('./routes/login') 
const index = require('./routes/index') 

app.use('/login', login); 
app.use('/', index); 
..... 

index.js(インポート部分をスキップする)以下のように定義される:

.... 
const express = require('express'); 
const router = express.router(); 

router.get('/', (req, res) => { 
    const el = React.createElement(App); 
    const html = ReactDOMServer.renderToString(el); 
    res.render('index', { html, title: 'Portal' }); 
}) 

module.exports = router 

そしてlogin.jsを(インポート部分をスキップ)と同様に定義される:

.... 
const express = require('express'); 
const router = express.router(); 

router.get('/', (req, res) => { 
    const el = React.createElement(Login); 
    const html = ReactDOMServer.renderToString(el); 
    res.render('index', { html, title: 'Portal' }); 
}) 

module.exports = router 
サーバー側レンダリング

hbsをテンプレートエンジンとして使用し、テンプレートファイルはindex.htmlです:

..... 
<div id="root">{{{ html }}}</div> 
<script src="static/js/bundle.js"></script> 
.... 

実行中のサーバーで、インデックスページとログインページの両方が正常に読み込まれました。ただし、ログインフォームで送信ボタンが機能しませんでした。言い換えると、イベントリスナーはクライアント側には接続されていませんでした。

私は間違って何かしますか?ありがとう。

答えて

0

このライブラリを使用する場合は、https://github.com/gaearon/react-hot-loader webpackを使用している場合、このリポジトリにはその依存関係のリンクがあります。

理由は? クライアント/サーバー側を1つずつレンダリングする必要があります。

サーバはただHTMLをレンダリングし、すべてのロジックjsコードをクライアント化し、リアクションインテリジェンスが実際にレンダリングされた反応コンポーネント(サーバ側ではfirtsを実行)を検出し、必要なもので更新すると、

関連する問題