2016-04-12 41 views
0

Küçük bir test için express.js ve react.js'yi kullanıyorum. ,İzomorfik ReactJS - hem sunucu tarafı hem de istemci tarafı için kod nasıl paylaşılır?

görüşlerini/Todo.jsx

var React = require('react'); 

var TodoApp = React.createClass({ 
    getInitialState: function() { 
     return { 
      counter: 0 
     }; 
    }, 

    increment: function() { 
     this.setState({ counter: this.state.counter+1 }); 
    }, 

    render: function() { 
     return (<div> 
      <div>{this.state.counter}</div> 
      <button onClick={this.increment}>Increment!</button> 
     </div>); 
    } 
}); 

module.exports = TodoApp; 

Ama düğme tıklandığında counter arttı asla Aşağıda benim kod tepki olduğunu. increment işlevi hiçbir zaman çağrılmadı.

Neden? Neyi yanlış yaptım?

DÜZENLEME:

tarayıcımda HTML çıktı:

<html><head></head> 
    <body><div class="container"> 
     <div>0</div> 
     <button>Increment!</button> 
    </div> 
    </body> 
</html> 

sen hiç html başlığında hiçbir js olduğunu görebileceğiniz gibi. Bunun beco mu? HTML'yi, sunucu tarafında react.js ile oluşturuyorum.

var express = require('express'); 
var reactViews = require('express-react-views'); 
var app = express(); 

// View engine setup. 
app.set('views', __dirname + '/views'); 
app.set('view engine', 'jsx'); 
app.engine('jsx', reactViews.createEngine()); 

// Set root. 
app.use(express.static(__dirname + '/views')); 

// Get routes. 
var todo = require('./routes/todo'); 

// Respond with "todo" app on the todo page. 
app.use('/todo', todo); 

var server = app.listen(3000, function() { 
    var host = server.address().address; 
    var port = server.address().port; 

    console.log('Example app listening at http://%s:%s', host, port); 
}); 

yolları/router.js

var express = require('express'); 
var router = express.Router(); 

router.get('/', function (request, response) { 
    response.render('Todo', {}); // 'Todo' is 'views/Todo.jsx' 
}); 

module.exports = router; 

Sorun istemci tarafında ve sunucu tarafı arasındaki paylaşılmayan tepki olduğunu düşünüyorum app.js. şu anda sadece sunucu tarafında çalışır. Nasıl paylaşılacağı ve müşteri tarafında da nasıl çalışabilirim?

Herhangi bir fikrin var mı?

+0

sadece (bu Artım! – Amit

+0

Sanırım kodumda bir sorun var. lütfen yukarıdaki düzenlememe bakın. – laukok

+1

Evet sağa! bu örneğe bakın https://github.com/mhart/react-server-example – Anonymous0day

cevap

0

Ben

[https://jsfiddle.net/56ppsy4v/][1] 
+0

Ben bu 'ReactDOM.render ( , document.getElementById ('container') ); bcos HTML'yi sunucu tarafında tepki ile işledim. lütfen yukarıdaki düzenlememe bakın. – laukok

0
<button onClick={this.increment}>Increment!</button> 

<button onClick={this.increment.bind(this)}>Increment!</button>