React.js Сервер рендеринга и обработчики событий
Я учусь использовать response.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>
)
}
});
Но кнопка «Мне нравится» не имеет никакого взаимодействия. Чтобы заставить это делать что-то по щелчку, я должен добавить этот код на стороне клиента.
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')
);
Я только начал с response.js и, может быть, мне просто не хватает какой-то важной концепции. Но почему response.js не просто создает код (который я теперь должен добавить вручную к клиенту) при рендеринге серверной части страницы? Таким образом, у меня есть избыточный код, и я чувствую, что это будет беспорядок в больших приложениях. По крайней мере, response.js достаточно умен, чтобы не рисовать две кнопки LikeButton, а «привязывать» одну созданную сторону сервера к клиентскому компоненту.