为服务器端呈现的React模板绑定事件处理程序
Binding events handlers for React template rendered on server side
为了让我了解React.js,我正在开发一个简单的公告板应用程序,它在客户端和服务器端都呈现视图。不幸的是,我遇到了一个障碍。
文件components/index.jsx
当前看起来像这样:
var React = require('react');
var Notice = React.createClass({
render: function () {
return (
<div className="noticeitem">
{this.props.text}
</div>
);
}
});
var NoticeForm = React.createClass({
handleSubmit: function (event) {
event.preventDefault();
console.log('Running');
},
render: function () {
return (
<form className="noticeForm" onSubmit={this.handleSubmit}>
<div className="form-group">
<textarea className="form-control" placeholder="Your notice..." ref="text" />
</div>
<input type="submit" className="btn btn-primary" value="Post" />
</form>
);
}
});
var Index = React.createClass({
render: function () {
var noticeNodes = this.props.notices.map(function (notice, index) {
return (
<Notice key={index} text={notice.text}>
</Notice>
);
});
return (
<div>
<h1>Noticeboard</h1>
<NoticeForm />
<div className="noticeList">
{noticeNodes}
</div>
</div>
);
}
});
module.exports = Index;
它在服务器端呈现得很好,但我注意到NoticeForm
的handleSubmit()
方法没有绑定到onSubmit
事件,这似乎合乎逻辑。当页面加载时,我正在加载已编译的模板文件,那么我如何将其应用于页面加载呢?从文档中不清楚我是如何做到的。
完整的源代码在这里,虽然我还没有提交handleSubmit()
方法
您需要在客户端重新呈现组件。我认为你现在所做的就是把你从服务器得到的东西放到像
这样的东西里<div id='view' dangerouslySetInnerHTML={{__html: this.props.body}} />
要使事件处理程序实际绑定,您应该执行以下操作:
var container = document.getElementById('view');
var component = YOURCOMPONENT HERE
React.renderComponent(component, container);
看一下API文档,这实际上不会卸载所有domnodes并重新绘制。它应该只附加所有必要的事件处理程序
https://facebook.github.io/react/docs/top-level-api.html如果你在已经有这个的节点上调用React.render()服务器呈现的标记,React将保留它并只附加事件处理程序,允许您具有非常高性能的首次加载经验。
相关文章:
- 使用自定义数据属性或将数据绑定到处理程序来处理事件
- 模拟 Web 浏览器方向更改事件以使用 Jasmine 测试绑定事件处理程序函数
- 单击事件执行单击和悬停事件处理程序,即使单击事件处理程序取消绑定所有处理程序也是如此
- 如何在页面加载时在 ajax 调用中绑定事件处理程序后触发事件
- 使用 ajax 加载的页面绑定和取消绑定事件处理程序
- 循环中的闭包:在循环中声明的变量在绑定事件侦听器时未正确预设到处理程序函数中
- 在使用fixture的Jasmine测试中绑定事件处理程序的最佳实践
- 动态绑定事件处理程序的最有效方法
- 在循环中绑定事件处理程序所需的闭包
- Javascript绑定事件处理程序的另一个函数激活/结束
- ReactJS移除ES6中的绑定事件处理程序
- 为服务器端呈现的React模板绑定事件处理程序
- 在for循环中绑定事件处理程序
- 在jQuery中绑定事件后,如何获得对事件处理函数的引用?
- jQuery事件绑定和处理
- 如何在Telerik MVC ClientTemplates中绑定事件处理程序
- 从 jQuery 处理程序取消绑定事件
- mailto:URL 在 jQuery 绑定事件处理程序中不起作用
- jQuery .on()没有绑定事件处理程序
- PureRenderMixin与绑定事件处理程序断开