Isomorphic ReactJS - 如何共享服务器端和客户端的代码?

时间:2016-04-12 07:05:49

标签: javascript node.js express reactjs isomorphic

我使用express.js和react.js进行小测试。以下是我的反应代码:

视图/ 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;

但是单击按钮时counter永远不会增加。永远不会调用increment函数。

为什么呢?我做错了什么?

修改

我的浏览器上的HTML输出:

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

你可以看到html标题中根本没有js。这是因为这个吗?我在服务器端使用react.js渲染HTML。

app.js

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);
});

路由/ 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;

我认为问题是客户端和服务器端之间没有共享反应。目前它仅适用于服务器端。如何以及我可以做什么,以便它共享,它也可以在客户端工作?

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我认为它工作正常,请查看以下小提琴

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

答案 1 :(得分:0)

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

应该是

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