【发布时间】:2016-07-13 23:58:04
【问题描述】:
我正在学习使用 react.js,但在使用事件处理程序时遇到了一些问题。最后一个问题是:是否可以使用服务器端渲染并将事件处理程序自动发送到客户端?
这是我的例子: 我有一个 index.jsx 渲染服务器端并发送到客户端
var React = require("react");
var DefaultLayout = require("./layout/default");
var LikeButton = React.createClass({
getInitialState: function() {
return {liked: false};
},
handleClick: function(event) {
this.setState({liked: !this.state.liked});
},
render: function() {
var text = this.state.liked ? 'like' : 'haven\'t liked';
return (
<p onClick={this.handleClick}>
You {text} this. Click to toggle.
</p>
);
}
});
var IndexComponent = React.createClass({
render: function(){
return (
<DefaultLayout title={this.props.name}>
<div>
<h1>React Test</h1>
</div>
<div id="testButton">
<LikeButton/>
</div>
<script type="text/babel" src="/js/react.js"></script>
</DefaultLayout>
)
}
});
但是“Like Button”没有任何交互作用。为了让它在点击时做一些事情,我必须添加这个代码客户端。
var LikeButton = React.createClass({
getInitialState: function() {
return {liked: false};
},
handleClick: function(event) {
this.setState({liked: !this.state.liked});
},
render: function() {
var text = this.state.liked ? 'like' : 'haven\'t liked';
return (
<p onClick={this.handleClick}>
You {text} this. Click to toggle.
</p>
);
}
});
ReactDOM.render(
<LikeButton />,
document.getElementById('testButton')
);
我刚开始使用 react.js,也许我只是在这里遗漏了一些主要概念。但是为什么 react.js 在渲染页面服务器端时不只是创建代码(我现在必须手动添加到客户端)? 像这样,我有冗余代码,感觉在大型应用程序中这将是一团糟。 至少 react.js 足够聪明,不会绘制两个 LikeButton,而是将创建的服务器端“绑定”到客户端组件。
【问题讨论】:
-
这与您的问题无关,但我相信您应该在将它传递给 onClick 之前绑定 handleClick 函数,否则它没有正确的上下文。 (但我不确定为什么单击按钮时不会出错,因为调用 this.setState 时应该会抛出错误)
-
@ktruong 在使用 React.createClass 时不需要绑定。它会自动绑定。
-
@jeffpc1993 哦,谢谢你指出这一点!
标签: javascript node.js reactjs event-handling