我有这样一个评论框:如何轻松地从孩子传递数据reactjs根?
我已绑定的所有行动,CommentBox组件,还有一个decComment行动来处理每个评论Delete
事件。
每次当我点击Comment
的delete
按钮,我需要的Comment
的commentId
传递给CommentList
到CommentBox
然后CommentBox
更新注释数据,删除从注释数据和注释重新呈现评论列表。
下面是一些代码:
var Comment = React.createClass({
handleDel: function() {
var cid = this.props.cid;
this.props.onDel(cid);
return false;
},
render: function() {
return (
<div key={this.props.cid}>
<a onClick={this.handleDel}>Del</a>
</div>
);
}
});
var CommentList = React.createClass({
handleDel: function(cid) {
this.props.onDel(cid);
},
render: function() {
var commentNodes = this.props.data.map(function(c) {
return <Comment cid={c.id} onDel={this.handleDel} />
}.bind(this));
return (
<div className="comments">
{commentNodes}
</div>
)
}
});
var CommentBox = React.createClass({
... ...
delComment: function (cid){
function del(data) {
$.ajax({
url: url,
type: 'delete',
dataType: 'json',
data: data,
success: function (e) {
if (e.retcode === 0) {
that.setState({
data: e.data
});
} else {
alert(e.error);
}
}
});
}
if (window.confirm('You Sure ?')) {
del();
}
},
... ...
})
这个过程太冗长!有没有简单的方法来做到这一点?
为什么是这样“太冗长”?在每一个组件,您可以重命名处理程序,以什么是适合的组件:在评论你正在处理一个“点击”,但组件外点击的概念是无关紧要的。在CommentList中,您正在寻找“onDel”的“删除”。坚持这一点,看看你在一个月内回到代码时的想法。我发现这种方法比在'document.body'上有大量侦听器更具描述性。 –